【发布时间】:2014-10-10 20:07:39
【问题描述】:
给定一个具有以下文档结构的 MongoDB 集合:
{
array_of_subdocs:
[
{
animal: "cat",
count: 10
},
{
animal: "dog",
count: 20
},
...
]
}
每个文档包含一个子文档数组,我想将集合转换为结构的文档:
{
cat: { count: 10 },
dog: { count: 20 },
...
}
其中每个子文档现在是主文档中以子文档中的一个值命名的新字段的值(在示例中,animal 字段的值用于创建名称的新字段,即cat 和dog)。
我知道如何使用带有 Javascript sn-p 的 eval 执行此操作。它很慢。我的问题是:如何使用聚合管道来做到这一点?
【问题讨论】:
-
聚合框架无法从“值”输出“键”名称。您需要 JavaScript 评估,例如 mapReduce,这将改变您的输出。在后期处理中进行。但无论如何,为您的密钥使用“数据”是一种不好的做法。
{ "animal": "cat", "count": 10 }, { "animal": "dog", "count": 20 }更加自然,因为您不必检查键,而是使用当前值。还是可以接受,但您只是不知道如何将其作为单独的文档从数组中取出? -
@NeilLunn - 谢谢尼尔。是的,我已经使用 mapReduce 了;希望找到一种聚合方式以获得最大性能。这里的动物示例是人为的,对于我的实际应用,使用值作为键名有一些优势。
-
重点是值作为键名是不好的做法。聚合框架不支持这种输出。
标签: mongodb aggregation-framework