Vấn đề có thể xảy ra ở đây là userid
của bạn giá trị thực sự không phải là ObjectID
chính xác gõ khi nó đang được chuyển vào đường ống. Điều này dẫn đến không có gì được "khớp" trong giai đoạn đầu.
Do đó, là một ví dụ đầy đủ hơn:
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 ) );
}
);
Sau đó, dữ liệu nào sẽ khớp với dữ liệu như mong đợi:
[
{
"_id": "537ec520e98bcb378e811d54",
"friends": [{
"name": "Ted",
"status": 0
}]
}
]
Vì vậy, hãy cẩn thận để đảm bảo đây là loại chính xác. Phương thức tổng hợp không tự động bao bọc một giá trị chuỗi chẳng hạn như "537ec520e98bcb378e811d54" vào một ObjectID
nhập khi nó được đề cập trong giai đoạn đường ống đối với _id
theo cách mà Mongoose thực hiện việc này với các phương pháp tìm và cập nhật khác.