您可以使用aggregate
尝试,如果你想获得只具有isRead
场的通知是false
。
Model.User.aggregate([
{$match:{_id: userid}},
{$unwind:"$notification"},
{$match:{"notification.isRead": false}},
{$group:{_id:"$_id",notification:{ $addToSet: "$notification"}}}
]).exec(function (err, result) {
console.log(result);
res.send(result);
})
例如您的文档,如:
{
"_id" : ObjectId("58454926668bde730a460e15"),
"notification" : [
{
"notification_id" : ObjectId("58454926668bde730a460e16"),
"isRead" : true
},
{
"notification_id" : ObjectId("58454926668bde730a460e17"),
"isRead" : true
},
{
"notification_id" : ObjectId("58454926668bde730a460e19"),
"isRead" : false
}
]
}
然后出去放会像:
{
"_id" : ObjectId("58454926668bde730a460e15"),
"notification" : [
{
"notification_id" : ObjectId("58454926668bde730a460e19"),
"isReady" : false
}
]
}
如果你想获得的所有通知如果isRead
任何一个false
那么你查询正确只是检查userid
是否存在于您通过的数据库中,并且某些通知isRead
为假。也可以使用$elemMatch
Model.User.find({
_id: userid
"notification":{ $elemMatch: { "isRead": false} }
}).exec(function (err, result) {
console.log(result);
res.send(result);
})
什么是你的猫鼬版本在应用程序中使用? –
猫鼬版本4.6.1 –
查询看起来正确,用户ID是否正确_id? –