【发布时间】:2016-03-20 12:26:57
【问题描述】:
我有一个 Mongo 查询,我想以与 SQL 中的 GROUP BY 相同的方式有效地使用 $group。
这对我不起作用,除非我将新文档的 _id 设置为对我不起作用的组类别之一,而且我无法从可能的三个文档中获得我想要的值我在 Mongo 中合并在一起。
在 SQL 中,我会写一些类似的东西来说明分组并选择我在 Mongo 中用作聚合的基础:
SELECT entity_id, connection_id, cycle_id, objectOriginAPI,accountBalance
FROM raw_originBusinessData
WHERE objectStatus = 'UPROCESSED'
AND (objectOriginAPI = 'Profit & Loss'
OR objectOriginAPI = 'Balance Sheet'
OR objectOriginAPI = 'Bank Summary')
GROUP BY entity_id, connection_id, cycle_id;
我已经解释为简化我的 Mongo 脚本对嵌入式数组所做的工作。
db.getCollection('raw_originBusinessData').aggregate([
{ "$match": {
objectStatus : "UNPROCESSED"
, $or: [
{ objectOriginAPI : "Profit & Loss"}
,{objectOriginAPI : "Balance Sheet"}
,{objectOriginAPI : "Bank Summary"}
]}
},
// don't worry about this, this is all good
{ "$unwind": "$objectRawOriginData.Reports" }
,{ "$unwind": "$objectRawOriginData.Reports.Rows" }
,{ "$unwind": "$objectRawOriginData.Reports.Rows.Rows" },
// this is where I believe I'm having my problem
{ "$group": {"_id": "$entity_id"
// , "$connection_id"
// , "objectCycleID"
, "accountBalances": { "$push": "$objectRawOriginData.Reports.Rows.Rows.Cells.Value" }
}},
{$project: {objectClass: {$literal: "Source Data"}
, objectCategory: {$literal: "Application"}
, objectType: {$literal: "Account Balances"}
, objectOrigin: {$literal: "Xero"}
, entity_ID: "$_id"
, connection_ID: "$connection_ID"
, accountBalances: "$accountBalances"}
}
]
// ,{$out: "std_sourceBusinessData"}
)
因此,我要合并到一个文档中的每个文档都有相同的 entity_id、connection_id 和 cycle_id,我想将它们放入新文档中。我还想确保新文档有它自己唯一的 object_id。
非常感谢您的帮助 - Mongo 文档不包含任何关于 $group 的内容,除了 _id 是强制性的,但如果我没有将 _id 设置为我想要分组的东西(在上面的脚本中它被设置到 entity_id)它没有正确分组。
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework