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.