mongodb - 如何在 MongoDB 中填充嵌套的引用数组?
问题描述
我在“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")
}
]
}
]
}
还有另一个集合“食物”,其中包含每种食物的营养信息,例如:
{
"_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"
}}
])
我已经挣扎了几个小时,尝试了不同的方法,结果都不同,但没有一种方法能得到正确的结果。欢迎任何建议。
谢谢
解决方案
您可以在所有管道之后添加它以重建您的foods
和meals
数组,
$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"
}
}
}
}
推荐阅读
- mysql - LIMIT 子句导致 mysql 查询的语法错误
- .htaccess - 使用 htaccess 将查询参数更改为 iOS 应用特定的深层链接
- javascript - 在 Bootstrap 4 中选择隐藏在表格下
- android - Ionic 4 图像显示错误
- r - 用R中的中值替换异常值
- qt - 如何将 QSpinBox 添加到 QTableWidget?
- firebase - Flutter fcm重定向问题
- python - 如何使用正则表达式匹配更长的字符串?
- javascript - useReducer 调度执行两次
- google-maps - 当父小部件为堆栈时,TextformFiled 在键盘下