如何在MongoDB中聚合不一致的子文档?

如何在MongoDB中聚合不一致的子文档?,mongodb,Mongodb,我有类似以下文件: [ { group: 'x', key_a: 1234, Key_b: 3942, keys: { 'one': 391, 'two': 39291} }, { group: 'y', key_a: 904, Key_b: 892, keys: { 'one': 41, 'three': 22} } ] 我希望将所有字段key_a、key b和key聚合在一起。因为keys是一个可以包含任意多个不同字段的映射,所以我希望将它添加到一起,以保持

我有类似以下文件:

[
{
  group: 'x',
  key_a: 1234,
  Key_b: 3942,
  keys: { 'one': 391, 'two': 39291}
},
{
  group: 'y',
  key_a: 904,
  Key_b: 892,
  keys: { 'one': 41, 'three': 22}
}
]
我希望将所有字段key_a、key b和key聚合在一起。因为keys是一个可以包含任意多个不同字段的映射,所以我希望将它添加到一起,以保持映射本身作为每个项之间的连接。例如,上述to文档之间的聚合结果将是:

{
  key_a: 2138,
  Key_b: 4834,
  keys: { 'one': 432, 'two':39291',  'three': 22}
}

有没有快速的方法可以做到这一点?

您尝试过什么?如果您没有提前知道密钥,我不确定在给定当前结构的情况下是否有办法(聚合需要已知的字段名)。如果您有
键:[{key:'one',value:432}…]
,可能会有一种方法,但即使这样也可能非常复杂和缓慢。我一直在用Python进行聚合(即,提取值并对其求和。当我进入dict(键)时)我有一个将两个dict“相加”在一起的函数。我想利用mongo中的新聚合框架来做同样的事情,但正如你所说的——它要求我知道那些dict中有哪些字段,我不一定知道。只是一个注记——目前,使用python聚合、使用聚合框架或使用mapreduce生成结果性能相似的。