mongodb - 将嵌套数组的嵌套数组的所有元素重新组合成一个数组
问题描述
我有这个系列:
{
"_id": ObjectId("6045eec8f113547ddd3472d9"),
"execution": {
"_id": ObjectId("6045eec8f113547ddd3472d8"),
"steps": [
{
"_id": ObjectId("6045eec8f113547ddd3472d7"),
"actions": [
{
"_id": ObjectId("6045eec8f113547ddd3472d6"),
"title": "action title"
}
]
}
]
}
}
我想达到这个结果:
{
"_id": ObjectId("6045eec8f113547ddd3472d9"),
"allActions": [
{
"_id": ObjectId("6045eec8f113547ddd3472d6"),
"title": "action title"
}
]
}
为了澄清更多,我想添加一个数组,将“步骤”数组下的所有“动作”组合在一起
db.getCollection("missions").aggregate([
{
$match: {
_id: ObjectId("6045eec8f113547ddd3472d9")
}
},
{
$addFields: {
"allActions": "$execution.steps"
}
}
])
有人可以帮我完成可以让我实现所需输出的代码部分吗?
解决方案
您可以只使用$reduce
and$concatArrays
对actions
数组中的所有条目进行分组
db.missions.aggregate([
{
$match: {
_id: ObjectId("6045eec8f113547ddd3472d9")
}
},
{
$addFields: {
"allActions": {
"$reduce": {
"input": "$execution.steps.actions",
"initialValue": [],
"in": {
"$concatArrays": [
"$$value",
"$$this"
]
}
}
}
}
}
])
这是Mongo游乐场供您参考。
推荐阅读
- gradle - gradle 仅在指定的子项目上构建
- api - 我的 api 数据不适用于 Postman(未经授权)
- c++ - 我该如何解决这个与使用 VCPKG 安装 GMP 相关的问题?
- android - Kotlin 编程语言中的 Android Studio 错误(RecyclerView 没有 LayoutManager)
- powershell - 多次并行运行同一任务 [POWERSHELL]
- android - 如何使用匕首将改造基本身份验证添加到网络模块?
- php - 获取由mysql查询填充的webform中所有复选框的状态
- python - 获取模型的 ID 并保存到 django 中其他模型的外键字段
- c# - Microsoft.ML 和 Xamarin
- ruby-on-rails - 在 Ruby 中,有没有一种可接受的方式将类拆分为更小的、可组合的 mixin(知道父级)?