2013-11-26 139 views
0

所以我很抱歉如果這個問題存在,我找不到一個適合我需求的答案,但我認爲它很簡單,不幸的是我對Mongo的非基本功能仍然陌生儘管在過去的兩年中已經涉獵了它。在Mongodb中使用聚合框架的簡單分組示例

我的數據: 我有一個集合這是一個非常簡單的文檔集,分別代表庫存的微芯片訂單項,芯片都有零件編號,股票代碼,日期代碼和分位數

(日期代碼指示產品何時生產:0611通常意味着2011年6月對於那些不熟悉的產品)。

零件號是運行搜索的ed用戶最重要的一部分數據,但零件號可能會顯示因爲它是代表股票代碼(代表PN +日期代碼)的集合中的多次個別訂單項。不幸的是,外部最終用戶並沒有對股票代碼進行飛揚的揣測。

對於此特定搜索,我需要對所有零件號進行分組並返回所述零件號的總數量 - 對於此特定查找,我不需要日期代碼。

所以基本上,來自這三個文檔:

{PN:1234,數量:200,日期代碼:0611,stockcode:1} {PN:1234,數量:300,日期代碼:0411,stockcode:2 } {PN:1254,數量:100,日期代碼:0601,stockcode:3}

我需要我的查詢以得到:

{PN:1234,數量:500} {PN:1254,數量:100}

我的問題: 我的問題很簡單,我似乎無法找到一個使用聚合框架做這樣一個簡單組的示例。一切都有更具體和複雜(如果只是稍微)的例子。

我的代碼: 我想要的代碼是這樣的:

db.collection.aggregate({ $group : 
         { _id : "$pn", 
          total_qty : { $sum : "$qty" } } }, 
         { $match : {qty : { $gte : 1 } } }) 

這是否有道理?

在此先感謝任何人。

+1

MongoDb在education.mongodb.com提供免費的在線課程,你應該檢查一下。我自己完成了一個。 –

+0

謝謝,我來看看。我將會越來越多地使用它。 – picus

回答

2

當聚合管道到達您的$match,該文檔將有_idtotal_qty領域,但你的對手是qty不再存在。所以,改變以total_qty代替:

db.collection.aggregate(
    { $group : { _id : "$pn", total_qty : { $sum : "$qty" } } }, 
    { $match : {total_qty : { $gte : 1 } } } 
) 
+0

oh derp,我會進去試試,謝謝。 – picus

0

聚集是一個管道,你應該通過階段的數組分配給它,在這種情況下,我們的第一個階段是匹配的,我們的第二階段分組,所以我們應該像格式化這個:

db.collection.aggregate([ {$match: ... }, {$group: ... }])