Mongoose findOne返回对象子数组的计数

时间:2017-04-16 08:26:17

标签: mongodb mongoose

我有这样的数据:

{
  "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的未读值的计数?

由于

1 个答案:

答案 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对您的阵列进行统计。