计数特定MongoDB ID下阵列上存在的对象数

时间:2017-12-21 12:06:09

标签: mongodb

我的MongoDB数据结构就像这样

{
    "_id" : ObjectId("5a3a67b102d9d926f8cd66b8"),
    "createdate" : ISODate("2017-12-20T13:37:53.921Z"),
    "groupmember" : [ 
        {
            "membername" : "a",
            "memberid" : "5a20ee1acdacc7086ce7742c"
        }, 
        {
            "membername" : "b",
            "memberid" : "5a20eb5bcdacc7086ce77427"
        }, 
        {
            "membername" : "c",
            "memberid" : "5a20ee35cdacc7086ce7742d"
        }, 
        {
            "membername" : "d",
            "memberid" : "5a20ee67cdacc7086ce7742e"
        }, 
        {
            "membername" : "e",
            "memberid" : "5a20ee9acdacc7086ce7742f"
        }
    ],
    "__v" : 0
}

现在我想计算组成员数组上存在的成员总数。 我有一个解决方案但它不适用于任何特定的ID。 我的解决方案是这样的

Test.aggregate([

                {$group:{'_id': '$_id', 'total': { $sum: { $size:"$groupmember" } }}}
            ], function(error, data){
                if (error) {
                    console.log(error)
                } else {
                    console.log(data);
                }
        });

因此,此方法返回数据库的所有计数。 我也尝试过Match和unwind但它返回空白数组。像这样

Test.aggregate([
                {$match: {_id: '5a3a67b102d9d926f8cd66b8'}},
                {$unwind: "$groupmember"},
                {$group:{'_id': '$_id', 'total': { $sum: { $size:"$groupmember" } }}}
            ], function(error, data){
                if (error) {
                    console.log(error)
                } else {
                    console.log(data);
                }
        });

2 个答案:

答案 0 :(得分:0)

你可以这样做:

Test.aggregate(
   [
      {
         $project: {
            noOfGroupMembers: { $size: "$groupmember" }
         }
      }
   ]
)

如果你想用id:

这样做
Test.aggregate(
   [
      {
        $match:"5a3a67b102d9d926f8cd66b8"
      },
      {
         $project: {
            noOfGroupMembers: { $size: "$groupmember" }
         }
      }
   ]
)

答案 1 :(得分:0)

Test.find({_id: '5a3a67b102d9d926f8cd66b8'}, function(err, data){
  if(err){
    console.log(err)
  } else {
    var length = data[0].groupmember.length;
    console.log(length);
  }
});