MongoDB聚合映射将(分组依据)缩减为嵌套哈希

MongoDB聚合映射将(分组依据)缩减为嵌套哈希,mongodb,mapreduce,aggregation-framework,Mongodb,Mapreduce,Aggregation Framework,举个简单的例子,我这里有一个数据集: { name: "a", age: 2, sex: "male" }, { name: "b", age: 4, sex: "male" }, { name: "c", age: 3, sex: "female" }, { name: "d", age: 5, sex: "female" }, { name: "e", age: 7, sex: "female" }, 我想将其改革为: { sex: male, people: { "a":

举个简单的例子,我这里有一个数据集:

{ name: "a", age: 2, sex: "male" },
{ name: "b", age: 4, sex: "male" },
{ name: "c", age: 3, sex: "female" },
{ name: "d", age: 5, sex: "female" },
{ name: "e", age: 7, sex: "female" },
我想将其改革为:

{ 
  sex: male, people: { 
    "a": 2,
    "b": 4,
  },
  sex: female, people: {
    "c": 3,
    "d": 5,
    "e": 7,
  },
}
我尝试过无数的解决方案,包括$group(addtoset)和$unwind。实际上,$addtoset部分完成了这项工作,但$addtoset只能生成一个新数组。我需要的是聚合成散列


有可能在MongoDB中实现这一点吗?

该结构是不可能的,因为所有“hash/map/object”无论您想称之为什么,键都必须始终是“唯一的”。本文件作为单一文件有什么可能的用途?不考虑收集方法,您的“people”元素必须定义为“array”,因为无法用同一个键的多次出现来构造。谢谢Blakes,这是我的错误。“名称”字段是唯一的。我需要将“people”元素作为以下“$group”聚合的哈希。您仍然不明白。
{}
结构下的任何内容只能出现一次名称“key”。您在多个地方多次列出了相同的内容。这不是“MongoDB可以做到吗”的问题,而是您提出的结构根本不可能。听起来你真正想要的只是男性或女性的不同名字,而且你可能不需要在一个文档中使用这两个名字。最好在这里解释你的真正目的,而不是提出抽象的例子,因为后者很少能解决你真正的问题。我有一个糟糕的例子……我想我现在就明白了。我想要的不是杂碎。现在,我认为这个问题本身是正确的