如何在 mongoDB 的第二级实现`lookup`? [复制]
Posted
技术标签:
【中文标题】如何在 mongoDB 的第二级实现`lookup`? [复制]【英文标题】:How to implement `lookup` in 2nd level in mongoDB? [duplicate] 【发布时间】:2020-08-24 00:04:57 【问题描述】:尝试在第二级使用 lookup
时,得到一个空数组而不是对象。
我有 3 个收藏,
1.registration
2.bus
3.operator
这里,registration
包含 busId
,bus
包含 operatorId
。
我首先使用registration
的busId
填充bus
。
然后使用填充的bus
尝试填充operator
。
注册文件集合:
"_id": "1", "busId": "1"
"_id": "2", "busId": "2"
bus集合的文档:
"_id": "1", "operatorId": "1", "name": "bus 01"
"_id": "2", "operatorId": "2", "name": "bus 02"
operator集合的文档:
"_id": "1", "name": "operator 01"
"_id": "2", "name": "operator 02"
我的预期结果:
[
_id: '1',
busId: '1',
busInfo: _id: '1', operatorId: '1', name: 'bus 01' ,
operatorInfo: _id: '1', name: 'operator 01'
,
_id: '2',
busId: '2',
busInfo: _id: '2', operatorId: '2', name: 'bus 02' ,
operatorInfo: '_id': '2', name: 'operator 02'
]
到目前为止我尝试了什么:
我正在使用以下聚合:
db.collection('registration').aggregate([
$lookup:
from: 'bus',
localField: 'busId',
foreignField: '_id',
as: 'busInfo'
,
$unwind: '$busInfo' ,
$lookup:
from: 'operator',
localField: 'busInfo.operatorId',
foreignField: '_id',
as: 'operatorInfo'
]);
And getting the empty operator list.
[
_id: '1',
busId: '1',
busInfo: _id: '1', operatorId: '1', name: 'bus 01' ,
operatorInfo: []
,
_id: '2',
busId: '2',
busInfo: _id: '2', operatorId: '2', name: 'bus 02' ,
operatorInfo: []
]
此结果包含空的 operatorInfo
数组。但我需要operatorInfo
对象。
第一个lookup
工作正常。但是在从busId
得到bus
之后,我需要得到operatorId
的operator
详细信息。 operatorId
在 bus
内。
【问题讨论】:
使用busInfo.operatorId
而不是busInfo.operator
。
仍然是空的 operatorInfo
数组。我用operatorId
更新了这个问题。这是一个错字。
【参考方案1】:
你应该试试
localField: 'busInfo.operatorId
而不是
localField: 'busInfo.operator
【讨论】:
仍然是空的operatorInfo
数组。我用operatorId
更新了这个问题。这是一个错字。
试试operators
insted of operator以上是关于如何在 mongoDB 的第二级实现`lookup`? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 mongodb 中使用 $lookup $let 变量?
如何在 mongodb 中使用 $lookup 加入多个集合