вы можете попробовать его с помощью 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);
})
Какая у вас версия мангуста, используемая в приложении? –
версия mongoose 4.6.1 –
запрос выглядит правильно, является ли userid правильным для _id? –