sql >> Base de Datos >  >> NoSQL >> MongoDB

Cómo agregar MongoDB en Node.js

El problema probable aquí es que su userid el valor no es en realidad un ObjectID correcto escriba cuando se pasa a la canalización. Esto da como resultado que no se "coincide" nada en la etapa inicial.

Por lo tanto como un ejemplo más completo:

var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var ObjectID = require("mongodb").ObjectID;

mongoose.connect("mongodb://localhost/test");

friendSchema = new Schema({
  "name": String,
  "status": Number
});

memberSchema = new Schema({
  friends: [friendSchema]
});

var Member = mongoose.model("Members", memberSchema );

var userid = new ObjectID("537ec520e98bcb378e811d54");

console.log( userid );

Member.aggregate([
  { "$match": { "_id": userid } },
  { "$unwind": "$friends" },
  { "$match": { "friends.status": 0 } }],
  function( err, data ) {

    if ( err )
      throw err;

    console.log( JSON.stringify( data, undefined, 2 ) );

  }
);

Que luego coincidirá con los datos como se esperaba:

[
  {
    "_id": "537ec520e98bcb378e811d54",
    "friends": [{
      "name": "Ted",
      "status": 0
    }]
  }
]

Así que tenga cuidado de asegurarse de que sea del tipo correcto. El método agregado no envuelve automáticamente un valor de cadena como "537ec520e98bcb378e811d54" en un ObjectID escribe cuando se menciona en una etapa de canalización contra _id en la forma en que Mongoose hace esto con otros métodos de búsqueda y actualización.