2016-06-09 47 views
0
{ 
     _id:1, members: [ 
     { 
      name:"John", 
      status:"A" 
     }, 
     { 
      name:"Alex", 
      status:"D" 
     }, 
     { 
      name:"Jack", 
      status:"A" 
     }, 
     { 
      name:"Robin", 
      status:"D" 
     } 
    ]} 

Channel document計算數組中相同類型的元素mongodb

現在我需要count成員數組中的所有元素,其中status equal to 'A'

例如上述文檔有2個成員status 'A'

我該如何做到這一點?

+0

'db.collectionname.find({ 「members.status」: 「A」})。COUNT()' –

回答

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 } 
1

您可以使用mongodb-count來達到預期的效果。

返回將匹配find()查詢的文檔數。 db.collection.count()方法不執行find()操作,而是計數並返回與查詢匹配的結果數。

所以您的查詢就會

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

現在recordCount將是匹配{"members.status":"A"}查詢記錄數。

-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}

+0

謝謝,但我的MongoDB的版本是3.0.7和更新can'nt。那麼這個mongodb版本還有其他解決方案嗎? – pankaj005

+0

試試這個然後db.CollectionName.aggregate([{「$ unwind」:「$ members」},{「$ match」:{「members.status」:「A」}},{「$ group」:{ _id: 「$ _ ID」, 「memberscount」:{ 「$總和」:1}}}])相當() –