Det troliga problemet här är att ditt userid
värdet är faktiskt inte ett korrekt ObjectID
typ när den leds in i rörledningen. Detta resulterar i att ingenting "matchas" i det inledande skedet.
Därför som ett mer komplett exempel:
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 ) );
}
);
Som sedan matchar data som förväntat:
[
{
"_id": "537ec520e98bcb378e811d54",
"friends": [{
"name": "Ted",
"status": 0
}]
}
]
Så var noga med att se till att detta är av rätt typ. Den aggregerade metoden lindar inte automatiskt ett strängvärde som "537ec520e98bcb378e811d54" till ett ObjectID
typ när den nämns i ett pipelinesteg mot _id
på det sätt som Mongoose gör detta med andra hitta och uppdatera metoder.