MongoDb聚合框架将字段的所有值推送到一个数组中

MongoDb聚合框架将字段的所有值推送到一个数组中,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我需要一个聚合来转换一组文档,如下所示: [ { "key": "key1" }, { "key": "key2" } ] 放入一个数组中: [ "key1", "key2" ] 谢谢 您可以通过操作员执行此操作 您可以通过操作员来执行此操作 您的问题: 在执行{$replaceRoot:{newRoot:$key}}的查询中,$key将获得key字段的值,即;键1用于第一个文档,键2用于第二个文档。但由于$replaceRoot接受一个对象,并将该对

我需要一个聚合来转换一组文档,如下所示:

[
  {
    "key": "key1"
  },
  {
    "key": "key2"
  }
]
放入一个数组中:

[
  "key1",
  "key2"
]
谢谢

您可以通过操作员执行此操作

您可以通过操作员来执行此操作

您的问题:

在执行{$replaceRoot:{newRoot:$key}}的查询中,$key将获得key字段的值,即;键1用于第一个文档,键2用于第二个文档。但由于$replaceRoot接受一个对象,并将该对象作为文档的新文档根,它需要查找字符串值而不是对象,这就是它失败的原因。无论如何,您需要使用$group stage来执行此操作,它在所有文档上进行迭代,而$replaceRoot stage将在每个文档上单独执行

将我的注释作为答案并添加说明:当使用聚合时,如果未找到匹配的文档/未存在文档,则将得到一个空数组[],否则将在结果中得到一个对象数组/对象[{}、{}或[{}]。因此,您无法在结果中获得像:['key1','key2']这样的元素数组,正如我所说的聚合结果数组将包含一个doc,那么它将像[{keys:['key1','key2']}]。您可以使用下面的查询获得它:

查询:

测试:

参考:

与您的查询相关的问题:

在执行{$replaceRoot:{newRoot:$key}}的查询中,$key将获得key字段的值,即;键1用于第一个文档,键2用于第二个文档。但由于$replaceRoot接受一个对象,并将该对象作为文档的新文档根,它需要查找字符串值而不是对象,这就是它失败的原因。无论如何,您需要使用$group stage来执行此操作,它在所有文档上进行迭代,而$replaceRoot stage将在每个文档上单独执行

将我的注释作为答案并添加说明:当使用聚合时,如果未找到匹配的文档/未存在文档,则将得到一个空数组[],否则将在结果中得到一个对象数组/对象[{}、{}或[{}]。因此,您无法在结果中获得像:['key1','key2']这样的元素数组,正如我所说的聚合结果数组将包含一个doc,那么它将像[{keys:['key1','key2']}]。您可以使用下面的查询获得它:

查询:

测试:


Ref:

我尝试了这个但没有成功:尝试这个:我尝试了这个但没有成功:尝试这个:
db.getCollection('collection_name').aggregate([
  {
    $group: {
      _id: null,
      key: {
        $push: "$key"
      }
    }
  }
])
db.collection.aggregate([
  /** grouping all docs without any condition in `_id` & pushing all values to an array `keys` (name is just a choice), for unique values use `$addToSet` instead of `$push`. */
  {
    $group: { _id: "", keys: { $push: "$key" } } },
  {
    $project: { _id: 0, keys: 1 } // Optional stage, You need to remove `_id` from result as it's included by default
  }
])