假設我有這兩個集合:
// Members:
{
"_id":{
"$oid":"60dca71f0394f430c8ca296d"
},
"church":"60dbb265a75a610d90b45c6b",
"name":"Julio Verne Cerqueira"
},
{
"_id":{
"$oid":"60dca71f0394f430c8ca29a8"
},
"nome":"Ryan Steel Oliveira",
"church":"60dbb265a75a610d90b45c6c"
}
和
// Churches
{
"_id": {
"$oid": "60dbb265a75a610d90b45c6c"
},
"name": "Saint Antoine Hill",
"active": true
},
{
"_id": {
"$oid": "60dbb265a75a610d90b45c6b"
},
"name": "Jackeline Hill",
"active": true
}
我想查詢它并得到如下結果:
// Member with Church names
{
"_id":{
"$oid":"60dca71f0394f430c8ca296d"
},
"church":"Jackeline Hill",
"name":"Julio Verne Cerqueira"
},
{
"_id":{
"$oid":"60dca71f0394f430c8ca29a8"
},
"church":"Saint Antoine Hill",
"nome":"Ryan Steel Oliveira"
}
如果我嘗試查找,我會得到以下結果:(它正在獲取整個教堂的集合)。

我將如何進行查詢,因此它只給了我與該成員相關的一個教會?
并且,如果可能的話,如何按教堂的字母順序然后按名稱對結果進行排序?
觀察: MongoDB 版本:4.4.10
uj5u.com熱心網友回復:
$lookup--> $pipeline--> 中存在匹配錯誤$match。
它應該是:
$match: {
$expr: {
$eq: [
"$_id",
"$$searchId"
]
}
}
從提供的檔案,memberstochurchies關系將是1 to many。因此,當你加入members與churchies通過$lookup,輸出church將是一個陣列只有一個churchies檔案。
聚合管道:
$lookup- 將members集合 (by$$searchId) 與churchies(by_id) 連接起來。$unwind- 將church陣列欄位解構為多個檔案。$project- 裝飾輸出檔案。$sort- 排序church和name升序。
db.members.aggregate([
{
"$lookup": {
"from": "churchies",
"let": {
searchId: {
"$toObjectId": "$church"
}
},
"pipeline": [
{
$match: {
$expr: {
$eq: [
"$_id",
"$$searchId"
]
}
}
},
{
$project: {
name: 1
}
}
],
"as": "church"
}
},
{
"$unwind": "$church"
},
{
$project: {
_id: 1,
church: "$church.name",
name: 1
}
},
{
"$sort": {
"church": 1,
"name": 1
}
}
])
示例 Mongo Playground
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/359658.html
上一篇:MongodbAggregate-如何通過multilpe陣列索引過濾陣列?
下一篇:獲取任何國家的時間格式
