我是Mongodb和NoSQL的新手,我試圖使用mongodbs聚合函數來將數據從一個集合中插入到另一個集合中。原始集合的一個例子是這樣的:
原始集合 { supplier: 'aldi', timestamp: '1492807458', user: '[email protected]', hasBeenAggregated:false, items:[{ name: 'butter', supplier: 'aldi', expiry: '1492807458', amount: 454, measureSymbol: 'g', cost: 2.19 },{ name: 'milk', supplier: 'aldi', expiry: '1492807458', amount: 2000, measureSymbol: 'ml', cost: 1.49 }] }
輸出我想實現將是一個例子:
新集合 { user:'[email protected]', amount: 3.68, isIncome: false, title: 'food_shopping', timestamp: '1492807458' }
我正在使用的聚合函數是:
聚集 var result = db.runCommand({ aggregate: 'food_transactions', pipeline: [ {$match: {hasBeenAggregated: false}}, {$unwind: '$items'}, {$group:{_id: '$_id',amount:{$sum: '$items.cost'}}}, {$project: { _id:0, user:1, amount:1, isIncome: {$literal: false}, title:{$literal: 'food_shopping'}, timestamp:1 }} ] }); printjson(result)
此聚合函數不返回user
或timestamp
領域。相反,我得到下面的輸出:
輸出 { "amount" : 3.6799999999999997, "isIncome" : false, "title" : "food_shopping" }
如果我不組的結果,並執行在$project
階段的計算,字段都正確地預測,但很明顯,有一個爲items
數組中的每個子文檔創建的新文檔,這相當於打破了聚合的目的。
我在做什麼錯?