MongoDB 中的项目删除了文档中的一个级别

Project in MongoDB removing a level in the document

我有一个 collection 有这样的文档:

{
  _id: "Id", 
  foo: {
    variable1: {
      value: "value1"
    }, 
    variable2: {
      value: "value2"
    }
  }
}

其中 variable 可以有不同的值,我正在尝试通过 mongo 查询

获得类似的值
[
  {
     _id: "Id", 
     values: [
       "value1", "value2" 
     ]
  }
]

可能吗?我不确定我是否可以通过聚合来做到这一点...

您可以通过一个简单的聚合查询来实现这一点,该查询将对象投影到一个数组中,然后根据文档 ID 将其重新分组。

db.test.aggregate([
  { 
     $project: {
        values: { $objectToArray: "$foo" }
     }
  },
  {
     $unwind: "$values",
  },
  {
     $group : { _id: "$_id", values: { $push:  "$values.v.value" } }
  }
]);

上面会输出如下

{ "_id" : "Id", "values" : [ "value1", "value2" ] }

更新:

正如 mickl 在评论中所说,您还可以使用 $map 将所有值投影到 $project 阶段。

db.test.aggregate([
  { 
     $project: {
        values: {
          $map: {
            input: { $objectToArray: "$foo" },
            as: "val",
            in: "$$val.v.value"
          }
        }
     }
  }
]);

这也会输出

{ "_id" : "Id", "values" : [ "value1", "value2" ] }