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
}
])