0

While trying to use lookup in 2nd level, getting an empty array instead of an object.

I have 3 collections, 1. registration 2. bus 3. operator

Here, registration contains busId, and the bus contains the operatorId. I first populate the bus using the busId of registration. Then with the populated bus try to populate the operator.

Documents of registration collection:

{ "_id": "1", "busId": "1" }
{ "_id": "2", "busId": "2" }

Documents of bus collection:

{ "_id": "1", "operatorId": "1", "name": "bus 01" }
{ "_id": "2", "operatorId": "2", "name": "bus 02" }

Documents of operator collection:

{ "_id": "1", "name": "operator 01" }
{ "_id": "2", "name": "operator 02" }

My expected result:

[
  {
    _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' }
  }
]

What I tried this far:

I am using the following aggregation:

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: []
  }
]

This result has the empty operatorInfo Array. But I need the operatorInfo object.

The first lookup is working fine. But after getting bus from the busId, I need to get the operator details of the operatorId. operatorId is inside the bus.

Shams Nahid
  • 6,239
  • 8
  • 28
  • 39

1 Answers1

0

you should try localField: 'busInfo.operatorId instead of localField: 'busInfo.operator

Pardeep Baboria
  • 458
  • 4
  • 12