我有三個收藏:
收藏培訓計劃:
{
"_id": "622683098c0a837e9d8e62ca",
"days": [
{
"rest": false,
"training_id": "622662616c279faf3e0e00bd",
"_id": "622683098c0a837e9d8e62cb"
},
{
"rest": true,
"_id": "622683098c0a837e9d8e62cc"
},
{
"rest": false,
"training_id": "6226649f6c279faf3e0e00cc",
"_id": "622683098c0a837e9d8e62cd"
},
{
"rest": true,
"_id": "622683098c0a837e9d8e62ce"
}
],
"__v": 0
}
對于每一天,我都存盤training_id為指向訓練集合的外鍵:
{
"_id": "622662616c279faf3e0e00bd",
"name": "Core easy",
"exerc": [
{
"ex_id": "62265892d68c687412db2423",
"sets":4,
"_id": "622662616c279faf3e0e00be"
},
{
"ex_id": "622655f383c6328b70380f72",
"sets":4,
"_id": "622662616c279faf3e0e00c2"
},
{
"ex_id": "62265bb4b8a1af9d8532c7fd",
"sets":4,
"_id": "622662616c279faf3e0e00c7"
}
],
"__v": 0
},
{
"_id": "6226649f6c279faf3e0e00cc",
"name": "Core medium",
"exerc": [
{
"ex_id": "62265cd3b8a1af9d8532c802",
"sets":4,
"_id": "6226649f6c279faf3e0e00cd"
},
{
"ex_id": "62265bb4b8a1af9d8532c7fd",
"sets":4,
"_id": "6226649f6c279faf3e0e00d2"
},
{
"ex_id": "62265892d68c687412db2423",
"sets":4,
"_id": "6226649f6c279faf3e0e00d7"
}
],
"__v": 0
}
每個訓練都有陣列exec,其中包含對練習集合的參考:
{
"_id": "6226526a96b270821aa418bd",
"name": "Leg killer",
"muscle": [
"kvadriceps"
],
"__v": 0
},
{
"_id": "622655f383c6328b70380f72",
"name": "Bulgarian squat",
"muscle": [
"kvadriceps",
"zadnja lo?a",
"gluteus"
],
"__v": 0
},
{
"_id": "62265892d68c687412db2423",
"name": "Plank",
"muscle": [
"core",
"trbu?njaci"
],
"__v": 0
},
{
"_id": "62265bb4b8a1af9d8532c7fd",
"name": "Leg Raise",
"muscle": [
"core",
"trbu?njaci"
],
"linkVideo": "https://www.youtube.com/watch?v=l4kQd9eWclE",
"__v": 0
},
{
"_id": "62265cd3b8a1af9d8532c802",
"name": "Sit up",
"muscle": [
"core",
"trbu?njaci"
],
"linkVideo": "https://www.youtube.com/watch?v=1fbU_MkV7NE",
"__v": 0
}
我嘗試過聚合、嵌套查找(這不適合我,因為我必須在第一次查找后使用 unwind)、addField 和 map 但它不起作用。所以任何人都可以幫助我或推薦我應該走哪條路。我發現類似的問題$lookup 與陣列的外部欄位和嵌套的外部欄位,但它也沒有答案。
我想要的結果應該是:
{
"_id": "622683098c0a837e9d8e62ca",
"days": [
{
"rest": false,
"training_id": "622662616c279faf3e0e00bd",
"_id": "622683098c0a837e9d8e62cb",
"name": "Core easy",
"exerc": [
{
"ex_id": "62265892d68c687412db2423",
"name": "Plank",
"muscle": [
"core",
"trbu?njaci"
],
"sets":4,
"_id": "622662616c279faf3e0e00be"
},
{
"ex_id": "622655f383c6328b70380f72",
"name": "Bulgarian squat",
"muscle": [
"kvadriceps",
"zadnja lo?a",
"gluteus"
],
"sets":4,
"_id": "622662616c279faf3e0e00c2"
}
]
},
and so on...
}
uj5u.com熱心網友回復:
我認為這可以滿足您的要求,并希望有一種更簡單的方法。我認為你還沒有考慮過的拼圖是"$mergeObjects"。
db.trainingPlan.aggregate([
{ "$unwind": "$days" },
{ "$lookup": {
"from": "training",
"localField": "days.training_id",
"foreignField": "_id",
"as": "training"
}
},
{ "$unwind": "$training" },
{ "$unwind": "$training.exerc" },
{ "$set": {
"days": {
"$mergeObjects": [ "$training", "$days" ]
}
}
},
{ "$lookup": {
"from": "exec",
"localField": "days.exerc.ex_id",
"foreignField": "_id",
"as": "exec"
}
},
{ "$set": {
"days.exerc": {
"$mergeObjects": [ { "$first": "$exec" }, "$days.exerc" ]
}
}
},
{ "$unset": [ "__v", "days.__v", "days.exerc.__v" ] },
{ "$group": {
"_id": "$_id",
"days": { "$push": "$days" }
}
}
])
在mongoplayground.net上試試。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/444045.html
