gpt4 book ai didi

mongodb - 如何在 MongoDB 中填充嵌套的引用数组?

转载 作者:行者123 更新时间:2023-12-04 03:57:07 25 4
gpt4 key购买 nike

我在“mealPlans”MongoDB 集合中有以下文档:

{
"_id" : ObjectId("5f4e1c7471b52b63b1ff3c25"),
"name" : "My Meal Plan",
"meals" : [
{
"name" : "Breakfast",
"foods" : [
{
"servingSize" : 100,
"food" : ObjectId("5f4a5b3486b27b159befb995")
},
{
"servingSize" : 50,
"food" : ObjectId("5f4a5b3486b27b159befb996")
}
]
},
{
"name" : "Lunch",
"foods" : [
{
"servingSize" : 100,
"food" : ObjectId("5f4a5b3486b27b159befb995")
}
]
}
]
}

还有另一个集合“foods”,其中包含每种食物的营养信息,例如:

{
"_id" : ObjectId("5f4a5b3486b27b159befb995"),
"name" : "Fenway franks",
"carbohydrate" : 4,
"calories" : 280,
"measurementUnit" : "g",
"fat" : 26,
"protein" : 12,
"servingSize" : 100
}

如何用每种食物的营养信息替换膳食计划文件中的食物引用?我尝试了以下方法来获取所有需要的信息,但我只是没有成功地将所有内容归类:

db.getCollection('mealPlans').aggregate([
{ "$unwind": "$meals" },
{ "$unwind": "$meals.foods" },
{ "$lookup": {
"from": "foods",
"localField": "meals.foods.food",
"foreignField": "_id",
"as": "meals.foods.food"
}}
])

我已经苦苦挣扎了几个小时,尝试了不同的方法,但都没有得到正确的结果。欢迎任何建议。

谢谢

最佳答案

您可以在所有管道之后添加它以重建您的 foodsmeals 数组,

  • $unwind 解构食物数组
  • $group 重构foods数组
  • $group 重构meals数组
  {
$unwind: {
path: "$meals.foods.food",
preserveNullAndEmptyArrays: true
}
},
{
$group: {
_id: {
_id: "$_id",
name: "$meals.name"
},
name: { $first: "$name" },
foods: { $push: "$meals.foods" }
}
},
{
$group: {
_id: "$_id._id",
name: { $first: "$name" },
meals: {
$push: {
name: "$_id.name",
foods: "$foods"
}
}
}
}

Playground

关于mongodb - 如何在 MongoDB 中填充嵌套的引用数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63686964/

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