Het waarschijnlijke probleem hier is dat uw userid
waarde is niet echt een correcte ObjectID
type wanneer het wordt doorgegeven aan de pijplijn. Dit heeft tot gevolg dat er niets wordt "gematcht" in de beginfase.
Daarom als vollediger voorbeeld:
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 ) );
}
);
Die dan overeenkomen met de gegevens zoals verwacht:
[
{
"_id": "537ec520e98bcb378e811d54",
"friends": [{
"name": "Ted",
"status": 0
}]
}
]
Zorg er dus voor dat dit van het juiste type is. De aggregatiemethode verpakt een tekenreekswaarde zoals "537ec520e98bcb378e811d54" niet automatisch in een ObjectID
type wanneer het wordt vermeld in een pijplijnfase tegen _id
op de manier waarop Mongoose dit doet met andere zoek- en updatemethoden.