Le problème probable ici est que votre userid
la valeur n'est pas réellement un ObjectID
correct type lorsqu'il est passé dans le pipeline. Il en résulte que rien n'est "correspondant" à l'étape initiale.
Donc comme exemple plus complet :
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 ) );
}
);
Qui correspondra alors aux données comme prévu :
[
{
"_id": "537ec520e98bcb378e811d54",
"friends": [{
"name": "Ted",
"status": 0
}]
}
]
Veillez donc à vous assurer qu'il s'agit du bon type. La méthode d'agrégation n'enveloppe pas automatiquement une valeur de chaîne telle que "537ec520e98bcb378e811d54" dans un ObjectID
tapez quand il est mentionné dans une étape de pipeline par rapport à _id
de la même manière que Mongoose le fait avec d'autres méthodes de recherche et de mise à jour.