[英]How to add populate with $lookup in aggregate using MongoDB (mongoose db)
我想將一張桌子與另一張桌子相連。 從連接表我也想加入另一個。 是否可以。 我將展示它作為一個例子。 這樣你會得到一個更好的主意。 作為 mongoDB 的新手,我不知道如何解釋。
game
_id: ObjectId("5e6099a40c0ad78d5fedd69e")
line: 7
title: "Test Title"
attendance: "19812"
eventDate: "2020-02-22T00:30:00Z"
__v: 115
createdAt: 2020-03-22T22:39:47.559+00:00
updatedAt: 2020-09-08T02:09:26.430+00:00
count: 65
betCount: 34
bets
_id: ObjectId("5e72df1694d71f34dd561f6e")
isMatched: false
hasWon: true
user: ObjectId("5e6c5b08e1fc8ccde43b12fb")
game: ObjectId("5e6099a40c0ad78d5fedd69e")
amount: 30
createdAt: 2020-03-19T02:55:18.141+00:00
updatedAt: 2020-03-23T03:04:17.062+00:00
__v: 0
users
_id: ObjectId("5e6c5b08e1fc8ccde43b12fb")
name: "Jithin"
bio: "My Name is Jithin."
email: "jithin@gmail.com"
createdAt: 2020-03-12T21:55:49.024+00:00
updatedAt: 2020-09-09T04:59:13.769+00:00
__v: 0
currentAmount: 232
winnings: 4
我已經使用下面的代碼來獲得結果,
Games.aggregate([
{
$lookup: {
from: "bets",
localField: "_id",
foreignField: "game",
as: "bets"
}
}
],
(err, resp) => {
if (err) {
res.status(500).send(err);
}
res.status(200).json(resp);
});
但是上面代碼的輸出是,
{
"_id": "5e609a4c0c0ad78d5fedd6a0",
"line": 7,
"title": "Test Title",
"attendance": "19812",
"eventDate": "2020-02-22T00:30:00Z",
"__v": 115,
"createdAt": "2020-03-22T22:39:47.559+00:00",
"count": 65,
"betCount": 34,
"updatedAt": "2020-09-08T02:09:26.430+00:00",
"bets": [
{
"_id": "5e72df1694d71f34dd561f6e",
"isMatched": false,
"hasWon": true,
"user": "5e6c5b08e1fc8ccde43b12fb",
"game": "5e6099a40c0ad78d5fedd69e",
"amount": 30,
"createdAt": "2020-03-19T02:55:18.141+00:00",
"updatedAt": "2020-03-23T03:04:17.062+00:00",
"__v": 0
},
....
]
},
....
我想用bets
表加入users
。 怎么做。 有沒有辦法做到這一點。 最終輸出應如下所示,
{
"_id": "5e609a4c0c0ad78d5fedd6a0",
"line": 7,
"title": "Test Title",
"attendance": "19812",
"eventDate": "2020-02-22T00:30:00Z",
"__v": 115,
"createdAt": "2020-03-22T22:39:47.559+00:00",
"count": 65,
"betCount": 34,
"updatedAt": "2020-09-08T02:09:26.430+00:00",
"bets": [
{
"_id": "5e72df1694d71f34dd561f6e",
"isMatched": false,
"hasWon": true,
"user": [
{
"_id": "5e6c5b08e1fc8ccde43b12fb",
"name": "Jithin",
"bio": "My Name is Jithin.",
"email": "jithin@gmail.com",
"createdAt": "2020-03-12T21:55:49.024+00:00",
"updatedAt": "2020-09-09T04:59:13.769+00:00",
"__v": 0,
"currentAmount": 232,
"winnings": 4
},
....
]
"game": "5e6099a40c0ad78d5fedd69e",
"amount": 30,
"createdAt": "2020-03-19T02:55:18.141+00:00",
"updatedAt": "2020-03-23T03:04:17.062+00:00",
"__v": 0
},
....
]
},
....
有沒有辦法達到上述結果。 我不知道如何實現這一目標。 我是 node.js 和 mongodb 的新手。 我真的被困在這里了。
您可以使用嵌套查找,
$lookup
使用管道和bets
收集$match
投注編號$lookup
與user
集合Games.aggregate([
{
$lookup: {
from: "bets",
let: { id: "$_id" },
pipeline: [
{ $match: { $expr: { $eq: ["$$id", "$game"] } } },
{
$lookup: {
from: "user",
localField: "user",
foreignField: "_id",
as: "user"
}
}
],
as: "bets"
}
}
],
(err, resp) => {
if (err) res.status(500).send(err);
res.status(200).json(resp);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.