使用聚合管道创建基于子文档值的名称的MongoDB字段?

给定具有以下文档结构的MongoDB集合:

{
    array_of_subdocs:
         [
             {
                 animal: "cat",
                 count: 10
             },
             {
                 animal: "dog",
                 count: 20
             },

             ...
         ]
}

每个文档包含一个子文档数组,我想将集合转换为结构文档:

{
    cat: { count: 10 },
    dog: { count: 20 },
    ...
}

其中每个子文档现在是主文档中以子文档中的一个值命名的新字段的值(在示例中,动物字段的值用于创建新字段的名称,即猫和狗).

我知道如何使用带有Javascript代码段的eval执行此操作.这很慢.我的问题是:如何使用聚合管道完成这项工作?

最佳答案 根据
this功能请求及其解决方案,将为此功能添加新功能 – 名为arrayToObject的功能.

db.foo.aggregate([
  {$project: {
    array_of_subdocs: {
      $arrayToObject: {
        $map: {
          input: "$array_of_subdocs",
          as: "pair",
          in: ["$$pair.animal", "$$pair.count"]
        }
      }
    }
  }}
])

但此刻,没有解决方案.我建议你改变你的数据结构.据我所知,有许多功能请求被标记为Major但多年未完成.

点赞