Kemungkinan masalah di sini adalah userid
Anda nilai sebenarnya bukan ObjectID
yang benar ketik ketika sedang dilewatkan ke dalam pipa. Ini menghasilkan tidak ada yang "cocok" pada tahap awal.
Oleh karena itu sebagai contoh yang lebih lengkap:
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 ) );
}
);
Yang kemudian akan cocok dengan data seperti yang diharapkan:
[
{
"_id": "537ec520e98bcb378e811d54",
"friends": [{
"name": "Ted",
"status": 0
}]
}
]
Jadi berhati-hatilah untuk memastikan ini adalah jenis yang benar. Metode agregat tidak secara otomatis membungkus nilai string seperti "537ec520e98bcb378e811d54" ke dalam ObjectID
ketik ketika disebutkan dalam tahap pipa terhadap _id
seperti yang dilakukan Mongoose dengan metode pencarian dan pembaruan lainnya.