计算数组mongodb中的相同类型元素

时间:2016-06-09 05:47:34

标签: mongodb mongodb-query

{
      _id:1, members: [
        {
            name:"John",
            status:"A"  
        },
        {
            name:"Alex",
            status:"D"  
        },
        {
            name:"Jack",
            status:"A"  
        },
        {
            name:"Robin",
            status:"D"  
        }
    ]}

那是Channel document

现在我需要count成员数组中status equal to 'A'的所有元素。

例如,上述文档中有2个成员status 'A'

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:1)

您可以使用mongodb-count来获得所需的结果。

  

返回与find()查询匹配的文档数。 db.collection.count()方法不执行find()操作,而是计算并返回与查询匹配的结果数。

所以你的查询将是

var recordcount = db.collName.count({"members.status":"A"});

现在recordCount将是与{"members.status":"A"}查询匹配的记录数。

答案 1 :(得分:0)

  

这是你的Json文件

{
    "_id" : ObjectId("575915653b3cc43fca1fca4c"),
    "members" : [
        {
            "name" : "John",
            "status" : "A"
        },
        {
            "name" : "Alex",
            "status" : "D"
        },
        {
            "name" : "Jack",
            "status" : "A"
        },
        {
            "name" : "Robin",
            "status" : "D"
        }
    ]
}
  

并且你想要成员数组中所有元素的数量   状态等于'A'。

     

你必须尝试这个才能找到你的点数

db.CollectionName.aggregate([{
    "$project": {
        "members": {
            "$filter": {
                "input": "$members",
                "as": "mem",
                "cond": {
                    "$eq": ["$$mem.status", "A"]
                }
            }
        }
    }
}, {
    "$project": {
        "membersize": {
            "$size": "$members"
        }
    }
}]).pretty()
  

你发现你的答案就像那个{“_ id”:    ObjectId(“575915653b3cc43fca1fca4c”),“membersize”:2}

     

尝试旧版本......

db.CollectionName.aggregate([{"$unwind":"$members"},{"$match":{"members.status":"A"}},{"$group":{_id:"$_id","memberscount":{"$sum":1}}}]).pretty()
{ "_id" : ObjectId("575915653b3cc43fca1fca4c"), "memberscount" : 2 }

答案 2 :(得分:-1)

  

这是你的Json文件

{
    "_id" : ObjectId("575915653b3cc43fca1fca4c"),
    "members" : [
        {
            "name" : "John",
            "status" : "A"
        },
        {
            "name" : "Alex",
            "status" : "D"
        },
        {
            "name" : "Jack",
            "status" : "A"
        },
        {
            "name" : "Robin",
            "status" : "D"
        }
    ]
}
  

并且你想要成员数组中所有元素的数量   状态等于'A'。

     

你必须尝试这个才能找到你的点数

db.CollectionName.aggregate([{
    "$project": {
        "members": {
            "$filter": {
                "input": "$members",
                "as": "mem",
                "cond": {
                    "$eq": ["$$mem.status", "A"]
                }
            }
        }
    }
}, {
    "$project": {
        "membersize": {
            "$size": "$members"
        }
    }
}]).pretty()
  

你发现你的答案就像那个{“_ id”:    ObjectId(“575915653b3cc43fca1fca4c”),“membersize”:2}