我想撰寫一個 $lookup 查詢示例User.aggregate([{ $match }]).lookup({...來列出具有額外鍵_team的用戶,其中用戶被分配為任何團隊的成員。這是示例 mongo 集合 -
第一集
# Users Collection -
{
"_id": "1",
"name": "Sankhnad"
},
{
"_id": "2",
"name": "Shweta"
}
第二集
# Teams Collection -
{
"_id": "1",
"name": "Rock Team",
"_members": [
2
]
},
{
"_id": "2",
"name": "Star Team",,
"_members": [
1,
]
},
{
"_id": "3",
"name": "Yeh Team",
"_members": [
1,
2
]
}
現在我想要一個對and集合的$lookup/aggregate查詢來列出所有用戶及其各自的團隊或選定的用戶及其團隊,該用戶已在.usersteams_members
所有用戶的預期輸出 -
# Output -
{
"_id": "1",
"name": "Sankhnad",
"_teams": [
{
"_id": "2",
"name": "Star Team",,
"_members": [
1,
]
},
{
"_id": "3",
"name": "Yeh Team",
"_members": [
1,
2
]
}
]
},
{
"_id": "2",
"name": "Shweta",
"_teams": [
{
"_id": "1",
"name": "Rock Team",
"_members": [
2
]
},
{
"_id": "3",
"name": "Yeh Team",
"_members": [
1,
2
]
}
]
}
我真的很感謝大家的支持。
uj5u.com熱心網友回復:
我們可以做類似下面的事情 -
db.users.aggregate([
{$match: {deleted: false}}, // Put condition in user collection if needed
{
$lookup: {
from: "teams",
localField: "_id",
foreignField: "_members",
as: "team"
}
},
{$unwind: { path: "$team", preserveNullAndEmptyArrays: true}},
{
$project: { // To show only the records that you want
"_id": 1,
"name": 1,
"team._id": 1,
"team.name": 1,
"team._members": 1
}
}
]);
uj5u.com熱心網友回復:
詢問
- 查找可以處理陣列/單個值,如果陣列包含該值,就會進行查找。(像查詢
$eq運算子一樣作業) - 因為你在字串和陣列中有“_id”,你也有它作為數字
$toInt也被使用
測驗代碼在這里
users.aggregate(
[{"$set":{"nid":{"$toInt":"$_id"}}},
{"$lookup":
{"from":"teams",
"localField":"nid",
"foreignField":"_members",
"as":"_teams"}},
{"$unset":["nid"]}])
uj5u.com熱心網友回復:
您可以按照用戶表中的$lookup使用,因為您需要用戶的關聯團隊。
注意:_members id應該是字串而不是用于查找的int32。如果它不是字串,則需要進行型別 轉換。
db.users.aggregate([$lookup:{
from: 'teams',
localField: '_id',
foreignField: '_members',
as: 'teams'
}])
使用查找管道的相同查詢會像
db.users.aggregate[{
from: 'teams',
let:{ids:"$_id"},
pipeline:[{
$match:{
$expr:{
$in:["$$ids","$_members"]
}
}
}],
as: '_teams'
}])
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/383082.html
標籤:节点.js MongoDB 猫鼬 mongodb-查询
上一篇:如何使用快速上傳檔案?
