gpt4 book ai didi

MongoDB $group(mongo Playground )

转载 作者:行者123 更新时间:2023-12-04 08:54:36 26 4
gpt4 key购买 nike

我问了一个问题here关于 $unwind 运算符,但在之后正确分组数据时遇到问题。

我有一个 mongo playground举个例子,但这里也是。在查询中的 $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,它现在是一个数组数组。完成后,您可以运行 $map嵌套 $filterSetsExerciseDetails 配对:

{
$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"
]
}
}
}
}
}
}
}

Mongo Playground

关于MongoDB $group(mongo Playground ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63908926/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com