2014-10-06 57 views
-1

的的Fileds我有一個集合像下面MongoDB的。需要計算一個數組

{ _id: 1, zipcode: "63109", students: [ 
        { name: "john", school: 102, age: 10 }, 
        { name: "jess", school: 102, age: 11 }, 
        { name: "jeff", school: 108, age: 15 } 
       ] } 



{ _id: 2, zipcode: "63110", students: [ 
        { name: "ajax", school: 100, age: 7 }, 
        { name: "achilles", school: 100, age: 8 }, 
       ] } 

{ _id: 3, zipcode: "63109", students: [ 
        { school: 100, age: 7 }, 
        { school: 100, age: 8 }, 
       ] } 

{ _id: 4, zipcode: "63109", students: [ 
        { name: "barney", school: 102, age: 7 }, 
        { name: "ruth", school: 102, age: 16 }, 
       ] } 

注:有些文件亙古不變的有場。

我想查找名稱字段的計數。 請建議查詢在mongo中查找計數

回答

2

您可以使用與$unwind彙總框架來完成此操作。假設你的收藏名稱是test

db.test.aggregate(
    {$unwind: '$students'}, 
    {$match:{'students.name':{$exists:1}}}, 
    {$group:{_id: '$students.name', count:{$sum:1}}}, 
    {$project:{tmp:{name:'$_id', count:'$count'}}}, 
    {$group:{_id:'Total Names', total:{$sum:1}, data:{$addToSet:'$tmp'}}} 
) 

希望這是你想要的!

0

在這種情況下,您需要使用聚合框架。

第一個聚合步驟將使用$unwind將數組轉換爲文檔流。

然後,您可以使用$group作爲與$sum:1的第二個聚合步驟來獲取每個名稱的計數。

db.collection.aggregate([  
    { 
     $unwind: "$students" 
    }, 
    { 
     $group: { 
      _id:"$students.name", 
      count: { $sum:1 } 
     } 
    }  
] 
+0

嗨菲利普感謝您的幫助。我嘗試根據您的建議我的查詢。 db.transactions.aggregate([{ $ 放鬆: 「body.payload.iemRecords」 },{ $ 組:{ _id: 「$ body.payload.iemRecords.CID」, 計數:{$總和:1} } } ])但是得到像「」異常:字段路徑引用的錯誤必須以'$'('body.payload.iemRecords',' – Aman 2014-10-06 13:38:08

+0

@Aman,作爲前綴看看Deepak的答案。 – bigtunacan 2014-10-06 14:02:31

+0

@Aman您在$ unwind中錯過了$ -sign,嘗試'$ unwind:「$ body.payload.iemRecords」' – Philipp 2014-10-06 14:21:52