我可以从Mongo聚合中获得嵌套数组的结果:
"vals": [
[ [ { "reference_date": "2013-09-01", "price": 79 },
{ "reference_date": "2013-09-02", "price": 69 },
{ "reference_date": "2013-09-03", "price": 101 }, ] ],
[ [ { "reference_date": "2013-08-01", "price": 101 },
{ "reference_date": "2013-08-02", "price": 106 },
{ "reference_date": "2013-08-03", "price": 101 }, ] ],
[ [ { "reference_date": "2013-07-01", "price": 129 },
{ "reference_date": "2013-07-02", "price": 163 },
{ "reference_date": "2013-07-03", "price": 192 }, ] ],
我正在使用此查询:
coll.aggregate([
{ $match: { 'account_id': '123', }, },
{ $group: {
_id: { 'account': '$account_id' },
vals: { $push: '$data.prices' } }, },
]);
我的基础文档如下所示:
{'account_id': '123',
. . . other stuff . . .
'data': [{
'prices': [
{ "reference_date": "2013-08-01", "price": 101 },
{ "reference_date": "2013-08-02", "price": 106 },
{ "reference_date": "2013-08-03", "price": 101 },
],
. . . other stuff under data key . . .
}]
如何修改查询以便将嵌套数组组合成一个数组,只保留对象项?
已更新: 提供更完整的基础文档视图。对不起以前没有。
更新2 嗯,我是一个糟糕的问题提问者,我的<<数据>> subdoc失败b / c数据下的值不是对象,它是一个只包含一个对象的数组。我正在试图弄清楚那个物体的提取,这个答案会起作用。
答案 0 :(得分:2)
更新以反映完整的文档详细信息
您需要在$unwind
之前data
data.prices
和$group
数组:
db.coll.aggregate([
{ $unwind: '$data' },
{ $unwind: '$data.prices' },
{ $match: { 'account_id': '123' } },
{ $group: {
_id: { 'account': '$account_id' },
vals: { $push: '$data.prices' } } }
]);