如何在 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 包含 busIdbus 包含 operatorId。 我首先使用registrationbusId 填充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 之后,我需要得到operatorIdoperator 详细信息。 operatorIdbus 内。

【问题讨论】:

使用busInfo.operatorId 而不是busInfo.operator 仍然是空的 operatorInfo 数组。我用operatorId 更新了这个问题。这是一个错字。 【参考方案1】:

你应该试试 localField: 'busInfo.operatorId 而不是 localField: 'busInfo.operator

【讨论】:

仍然是空的 operatorInfo 数组。我用operatorId 更新了这个问题。这是一个错字。 试试operators insted of operator

以上是关于如何在 mongoDB 的第二级实现`lookup`? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

使用聚合 $lookup 加入 mongodb

如何在 mongodb 中应用 $lookup 条件?

如何在 mongodb 中使用 $lookup $let 变量?

如何在 mongodb 中使用 $lookup 加入多个集合

如何在 Node.js 中高效/快速地执行数组连接,类似于 MongoDB $lookup?

MongoDB 聚合 - 我如何“$lookup”嵌套文档“_id”?