首页 > 解决方案 > MongoDB中的项目删除文档中的一个级别

问题描述

我有一个集合,其中包含这样的文档:

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

Wherevariable可以有不同的值,我正在尝试使用 mongo 查询来获得类似的东西

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

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

标签: mongodbmongodb-.net-driver

解决方案


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

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

以上将输出以下内容

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

更新:

正如 mickl 在 commets 中所说,您还可以使用$map来投射$project舞台内的所有值。

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

这也会输出

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

推荐阅读