Вероятният проблем тук е, че вашият userid
стойността всъщност не е правилен ObjectID
тип, когато се предава в тръбопровода. Това води до „съпоставяне“ на нищо в началния етап.
Следователно като по-пълен пример:
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 ) );
}
);
Което след това ще съответства на данните според очакванията:
[
{
"_id": "537ec520e98bcb378e811d54",
"friends": [{
"name": "Ted",
"status": 0
}]
}
]
Така че внимавайте да се уверите, че това е от правилния тип. Агрегираният метод не обгръща автоматично стойност на низ като "537ec520e98bcb378e811d54" в ObjectID
тип, когато се споменава в етап на конвейер срещу _id
по начина, по който Mongoose прави това с други методи за намиране и актуализиране.