MongoDB $ group(Mongo游乐场)

里奇·罗宾逊

我在这里问了一个有关$ unwind运算符的问题,但是在正确地对数据进行分组之后却遇到了问题

我有一个带示例mongo游乐场,但在这里也是如此。之后$unwind$lookup$group在查询中(也许有更好,更有效的方法?),我剩下的数据是:

[
  {
    "ExerciseDetail": [
      [{ "Name": "Squat", "_id": "5f60c3b7f93d8e00a1cdf414" }],
      [{ "Name": "Deadlift", "_id": "5f60c3b7f93d8e00a1cdf415" }]
    ],
    "Sets": [
      {
        "ExerciseId": "5f60c3b7f93d8e00a1cdf414",
        "Sets": [],
        "WorkoutExerciseId": "5f60dc1069c27c015ede4e3e"
      },
      {
        "ExerciseId": "5f60c3b7f93d8e00a1cdf415",
        "Sets": [],
        "WorkoutExerciseId": "5f60dc1069c27c015ede4e34"
      }
    ],
    "_id": "5f60dc1069c27c015ede4e3e"
  }
]

但是我想做的是,根据等效的ExerciseId将每个Exercise Detail对象添加到相应的Sets对象中,以便最终结果如下所示:

{
     "_id": "5f60dc1069c27c015ede4e3e",
     "Sets": [
        {
           "ExerciseId": "5f60c3b7f93d8e00a1cdf414",
           "Name": "Squat",
           "Sets": [],
           "WorkoutExerciseId": "5f60dc1069c27c015ede4e3e"
        },
        {
           "ExerciseId": "5f60c3b7f93d8e00a1cdf415",
           "Name": "Deadlift",
           "Sets": [],
           "WorkoutExerciseId": "5f60dc1069c27c015ede4e34"
        }
     ]
}

有人可以帮忙进行适当的分组吗?(如果您看到一种更好的$ unwind方法,还可以$ lookup吗?)

米克尔

您需要两个附加阶段。首先,您可以运行$ reduce来展平ExerciseDetail,这现在是一个数组数组。一旦完成,你可以运行$地图与嵌套$过滤器,以对Sets具有ExerciseDetails

{
    $addFields: {
        ExerciseDetail: {
            $reduce: {
                input: "$ExerciseDetail",
                initialValue: [],
                in: {
                    $concatArrays: [ "$$value", "$$this" ]
                }
            }
        }
    }
},

{
    $project: {
        _id: 1,
        Sets: {
            $map: {
                input: "$Sets",
                as: "set",
                in: {
                    $let: {
                        vars: {
                            exDetail: {
                                $arrayElemAt: [
                                    { $filter: { input: "$ExerciseDetail", cond: { $eq: [ "$$this._id", "$$set.ExerciseId" ] } } },
                                    0
                                ]
                            }
                        },
                        in: {
                            $mergeObjects: [
                                "$$set", "$$exDetail"
                            ]
                        }
                    }
                }
            }
        }
    }
}

蒙哥运动场

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

RemoveAtIndex使游乐场崩溃

来自分类Dev

RemoveAtIndex使游乐场崩溃

来自分类Dev

游乐场留言“次数”

来自分类Dev

快速布尔-游乐场

来自分类Dev

Objective-C的游乐场

来自分类Dev

斯威夫特游乐场打印括号

来自分类Dev

Java游乐场的Gradle任务

来自分类Dev

斯威夫特游乐场和LeetCode OJ

来自分类Dev

随机功能游乐场Swift

来自分类Dev

斯威夫特游乐场和LeetCode OJ

来自分类Dev

游乐场执行终止,因为游乐场进程意外退出

来自分类Dev

尝试在Swift游乐场中执行Xcode冻结?

来自分类Dev

进入游乐场以显示所有循环结果

来自分类Dev

游乐场执行失败:错误:无法查找符号

来自分类Dev

游乐场:使用未解决的标识符“ NSColor”

来自分类Dev

如何在Swift游乐场中获得画布

来自分类Dev

Xcode 6 Beta / Swift-游乐场未更新

来自分类Dev

斯威夫特游乐场结果位置错误

来自分类Dev

如何使用快速游乐场实现套接字连接?

来自分类Dev

游乐场执行Int()类型转换失败

来自分类Dev

GraphQL:如何通过游乐场传递查询变量?

来自分类Dev

我如何在Swift游乐场看到异常?

来自分类Dev

Xcode 6 Beta / Swift-游乐场未更新

来自分类Dev

在快速游乐场中使用T型

来自分类Dev

快速故障排除,在Xcode游乐场中显示数据?

来自分类Dev

斯威夫特游乐场结果位置错误

来自分类Dev

永久隐藏Xcode游乐场中的调试区域

来自分类Dev

游乐场-DispatchQueue和DispatchSemaphore之间的关系

来自分类Dev

如何链接 swift 游乐场中的页面?