我試圖弄清楚如何在 MongoDB 中進行連接。我讀過關于做聚合的文章:https : //docs.mongodb.com/manual/reference/operator/aggregation/lookup/,但這似乎不是我想要的。
我對 NoSQL 也很陌生,所以我不確定我應該在這里使用什么。
我在 MongoDB 中有兩個集合,結構如下:
資料庫集合 - 員工:
{
_id: 1,
name: 'John Doe',
filesAccess: {
web: true
},
fileIds: [
'fileId1',
'fileId2'
]
},
{
_id: 2,
name: 'Bob Jones',
filesAccess: {
web: false
},
fileIds: [
'fileId3',
'fileId4'
]
}
資料庫集合 - 檔案:
{
_id: fileId1,
fileMetaData: {
location: 'NE'
}
},
{
_id: fileId2,
fileMetaData: {
location: 'NE'
}
},
{
_id: fileId3,
fileMetaData: {
location: 'SW'
}
},
{
_id: fileId4,
fileMetaData: {
location: 'SW'
}
}
我希望能夠查詢所有擁有fileAccess.web = true并獲取其員工 ID、姓名和fileMetaData.location. 將location所有員工的檔案將是相同的。所以查詢只需要使用第一個fileId來自員工的location從files集合中獲取
所以我希望我的結果應該是這樣的:
{
_id: 1,
name: 'John Doe',
location: 'NE'
}
您將如何構建查詢以在 MongoDB 中完成此任務?我使用 Studio3T 作為我的資料庫介面。任何幫助是極大的贊賞
uj5u.com熱心網友回復:
您可以使用此聚合查詢:
- 首先
$match只獲取filesAccess.web正確的檔案。 - 聯接基于價值觀
fileIds和_id。這給出了一個陣列呼叫result。 - 然后拿到第一個位置
- 并
$project輸出您想要的欄位。
db.employess.aggregate([
{
"$match": {
"filesAccess.web": true
}
},
{
"$lookup": {
"from": "files",
"localField": "fileIds",
"foreignField": "_id",
"as": "result"
}
},
{
"$set": {
"result": {
"$arrayElemAt": [
"$result",
0
]
}
}
},
{
"$project": {
"_id": 1,
"name": 1,
"location": "$result.fileMetaData.location"
}
}
])
示例在這里
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/350924.html
