3

我可以从 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 嗯,我是一个糟糕的提问者,我的 << data >> subdoc 失败 b/c data 下的值不是一个对象,它是一个只包含一个对象的数组。我正在为试图弄清楚该对象的提取而烦恼,答案将起作用。

4

1 回答 1

2

更新以反映完整的文档详细信息

你需要在$unwind你的datadata.prices之前你的数组$group

db.coll.aggregate([
  { $unwind: '$data' },
  { $unwind: '$data.prices' },
  { $match: { 'account_id': '123' } },
  { $group: {
    _id: { 'account': '$account_id' },
    vals: { $push: '$data.prices' } } }
]);
于 2013-09-20T20:37:39.723 回答