MongoDB聚合:从嵌入式数组中提取值,并在根级别上创建单个数组



集合中文档的形状

[
{
"predictions": [
"611b85b9b2b924245526c125"
],
"_id": "611e40b6dd381f18cf63d15f",

"__v": 0
},
{
"predictions": [
"611b85b9b2b924245526c125"
],
"_id": "611e40b6dd381f18cf63d160",

"__v": 0
}
]

我的聚合管道

ActiveFixture.aggregate([
{$match:{fixture:{$in:fixtureIds}}},
{$project:{"predictions":1, _id:0}},
{$unwind:"$predictions"},
{$group:{_id:'blah', "Predictions":{"$push":"$predictions"}}}



]).exec()

电流输出:

[
{
"_id": "blah",
"Predictions": [
"611b85b9b2b924245526c125",
"611b85b9b2b924245526c125",
"611b85b9b2b924245526c125",
"611b85b9b2b924245526c125"
]
}
]

期望的输出将是来自预测数组的所有值作为单个数组:

["611b85b9b2b924245526c125", "611b85b9b2b924245526c125", "611b85b9b2b924245526c125"]

任何想法和建议都将不胜感激。显然,我很清楚用JS将当前输出转换为所需形状是很简单的,但目标是用MongoDB Aggregation 实现最终产品

$unwind所有预测,按null分组(所有集合为1组),$push所有成员到数组。

此处测试代码

db.collection.aggregate([
{
"$unwind": {
"path": "$predictions"
}
},
{
"$group": {
"_id": null,
"predictions": {
"$push": "$predictions"
}
}
},
{
"$project": {
"_id": 0
}
}
])

如果您想跳过您的id column,那么您应该使用mongodb的$skip命令。它允许您跳过文档数您应用的任何其他条件

如果您想有条件地从输出中删除一些数据。您可以使用以下查询

db.collection.aggregate( [ { $project : { "_id" : 0, "predictions" : 1 } } ] )

最新更新