同一集合中的 Mongoose $lookup 不起作用
Mongoose $lookup in same collection doesn't work
我有以下数据集,其中我有两种类型的对象由字段 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();
尽管我的 baseLocation
字段是指向 base
位置对象的 ObjectId,但我在 locationData
中为我的 extra
位置获得了一个空数组。
我觉得你打错了。而不是 from: 'location'
,它应该是 from: 'locations'
.
尝试像这样更改您的代码:
const location = await Location.collection.aggregate([{
$lookup: {
from: 'locations',
localField: 'baseLocation',
foreignField: '_id',
as: 'locationData'
}
}]);
如果您需要更多“深度”链接位置,您可以使用 "$graphLookup"
。
[在加油站找到糖果机。]
db.locations.aggregate([
{
"$graphLookup": {
"from": "locations",
"startWith": "$baseLocation",
"connectFromField": "baseLocation",
"connectToField": "_id",
"as": "locationData"
}
}
])
在 mongoplayground.net 上试用。
我有以下数据集,其中我有两种类型的对象由字段 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();
尽管我的 baseLocation
字段是指向 base
位置对象的 ObjectId,但我在 locationData
中为我的 extra
位置获得了一个空数组。
我觉得你打错了。而不是 from: 'location'
,它应该是 from: 'locations'
.
尝试像这样更改您的代码:
const location = await Location.collection.aggregate([{
$lookup: {
from: 'locations',
localField: 'baseLocation',
foreignField: '_id',
as: 'locationData'
}
}]);
如果您需要更多“深度”链接位置,您可以使用 "$graphLookup"
。
[在加油站找到糖果机。]
db.locations.aggregate([
{
"$graphLookup": {
"from": "locations",
"startWith": "$baseLocation",
"connectFromField": "baseLocation",
"connectToField": "_id",
"as": "locationData"
}
}
])
在 mongoplayground.net 上试用。