我有这样的数据:
{
"profileID": "123456789",
"myArray": [
{
"read": false
},
{
"read": true
},
{
"read": false
},
{
"read": true
}
]
}
我希望能够得到以下数据: myArray ,其中读取 false 。我需要在Mongoose上这样做。在上面的示例中,我想要的回报是 2 。
我的findOne如下:
userModel.findOne({'profileID': 123456789}, function(err, myArray) {
//Code to run here
});
我可以手动浏览回复并按照这种方式计算,但这样会非常无效。
如何在数据库级别获取用户 myArray的未读值的计数?
由于
答案 0 :(得分:2)
您应该使用aggregate:
> db.bla.insert({
... "profileID": "123456789",
... "myArray": [
... {
... "read": false
... },
... {
... "read": true
... },
... {
... "read": false
... },
... {
... "read": true
... }
... ]
... })
WriteResult({ "nInserted" : 1 })
> db.bla.aggregate([{$match:{"profileID":"123456789"}}, {$unwind:"$myArray"}, {$match:{"myArray.read":false}}, {$count:"unread_mail"}])
{ "unread_mail" : 2 }
然后,您可以$unwind
对您的阵列进行统计。