我有以下資料集,其中我有兩種型別的物件,由lType可以是base或的欄位區分extra。extra 有一個base位置的參考。
[
{
"_id": "622b6f1c7a0aca9aa252756c",
"country": "US",
"county": "Florida",
"city": "Miami",
"lType": "base",
"displayString": "Florida,Miami",
"__v": 0
},
{
"_id": "622b6f1d7a0aca9aa252756e",
"landmark": "Gas station",
"baseLocation": "622b6f1c7a0aca9aa252756c",
"lType": "extra",
"displayString": "Florida,Miami,Gas station",
"__v": 0
},
{
"_id": "622b6f4c5d0fe602a18826a7",
"country": "US",
"county": "Florida",
"city": "Tampa",
"lType": "base",
"displayString": "Florida,Tampa",
"__v": 0
},
{
"_id": "622b6f4c5d0fe602a18826a9",
"landmark": "Downtown",
"baseLocation": "622b6f4c5d0fe602a18826a7",
"lType": "extra",
"displayString": "Florida,Tampa,Downtown",
"__v": 0
}
]
當我嘗試進行這樣的聚合查找時
const location = await Location.collection.aggregate([{
$lookup: {
from: 'location',
localField: 'baseLocation',
foreignField: '_id',
as: 'locationData'
}
}]).toArray();
即使我的欄位是指向位置物件的 ObjectId locationData,我的位置也會得到一個空陣列。extrabaseLocationbase
uj5u.com熱心網友回復:
我認為你有一個錯字。而不是from: 'location',它應該是from: 'locations'。
嘗試像這樣更改您的代碼:
const location = await Location.collection.aggregate([{
$lookup: {
from: 'locations',
localField: 'baseLocation',
foreignField: '_id',
as: 'locationData'
}
}]);
作業示例
uj5u.com熱心網友回復:
如果您需要更多“深度”鏈接位置,您可以使用"$graphLookup".
[在加油站找到糖果機。]
db.locations.aggregate([
{
"$graphLookup": {
"from": "locations",
"startWith": "$baseLocation",
"connectFromField": "baseLocation",
"connectToField": "_id",
"as": "locationData"
}
}
])
在mongoplayground.net上試試。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/441236.html
標籤:节点.js mongodb 猫鼬 mongodb查询 聚合框架
