'I have multiple collections in mongodb , and I joined the collection and with aggregate lookup

I want to find party information, company information and also the number of teacher and student who attend the party. ween I run the following code in mongdbplayground I don't have error I get required result, but when I copy code run it in visual studio, I am getting this error "MongoError: $lookup with 'pipeline' may not specify 'localField' or 'foreignField'" . The below code is my sample database and the query.'

db={
  partys: [
    {
      "_id": 1,
      "description": "party 1 desc",
      "name": "party 1",
      "company": 1
    },
    {
      _id: 2,
      "description": "party 2 desc",
      "name": "party 2",
      "company": 1
    },
    {
      "_id": 3,
      "description": "party 3 desc",
      "name": "party 3",
      "company": 2
    },
    {
      "_id": 4,
      "description": "party 4 desc",
      "name": "party 4",
      "company": 3,
      
    },
    {
      "_id": 5,
      "description": "party 5 desc",
      "name": "party 5",
      "company": 5
    }
  ],
  companys: [
    {
      "_id": 1,
      "type": "school",
      "name": "21st Century Early Learning Foundation Academy"
    },
    {
      "_id": 2,
      "type": "business",
      "name": "Bait Shop"
    },
    {
      "_id": 3,
      "type": "school",
      "name": "NSC"
    },
    {
      "_id": 4,
      "type": "school",
      "name": "SSC"
    },
    {
      "_id": 5,
      "type": "school",
      "name": "Seattle Central"
    }
  ],
  participants: [
    {
      "_id": 1,
      "permissions": [
        "foo"
      ],
      "user_id": 1,
      "party_id": 4
    },
    {
      "_id": 2,
      "permissions": [
        "bar"
      ],
      "user_id": 1,
      "party_id": 3
    },
    {
      "_id": 3,
      "permissions": [
        "baz"
      ],
      "user_id": 2,
      "party_id": 4
    },
    {
      "_id": 4,
      "permissions": [
        "teach"
      ],
      "user_id": 3,
      "party_id": 1
    },
    {
      "_id": 5,
      "permissions": [
        "teach"
      ],
      "user_id": 5,
      "party_id": 2
    },
    {
      "_id": 6,
      "permissions": [
        "teach"
      ],
      "user_id": 5,
      "party_id": 3
    },
    {
      "_id": 7,
      "permissions": [
        "teach"
      ],
      "user_id": 5,
      "party_id": 4
    },
    {
      "_id": 8,
      "permissions": [
        "teach"
      ],
      "user_id": 3,
      "party_id": 2
    },
    
  ],
  users: [
    {
      "_id": 1,
      "first_name": "yergalem",
      "last_name": "teferi",
      "role": "student",
      "company": 3
    },
    {
      "_id": 2,
      "first_name": "dan",
      "last_name": "jack",
      "role": "student",
      "company": 2
    },
    {
      "_id": 3,
      "first_name": "bootsy",
      "last_name": "collins",
      "role": "teacher",
      "company": 3
    },
    {
      "_id": 4,
      "first_name": "george",
      "last_name": "clinton",
      "role": "teacher",
      "company": 1
    },
    {
      "_id": 5,
      "first_name": "thelonious",
      "last_name": "monk",
      "role": "teacher",
      "company": 2
    }
  ]
}


//code
router.get('/test', (req, res) => {
partys.aggregate([
  {
    $lookup: {
      from: "participants",
      localField: "_id",
      foreignField: "party_id",
      as: "party_participants",
      pipeline: [
        {
          $unset: "party_id"
        },
        {
          $addFields: {
            "participant_id": "$_id"
          }
        },
        {
          $unset: "_id"
        },
        {
          $lookup: {
            from: "users",
            localField: "user_id",
            foreignField: "_id",
            as: "participant_user_info"
          }
        },
        {
          $unwind: "$participant_user_info"
        },
        {
          $unset: "user_id"
        },
        {
          $group: {
            _id: "$participant_user_info.role",
            data: {
              $push: "$$ROOT"
            }
          }
        },
        {
          $group: {
            _id: null,
            "data": {
              $push: {
                k: "$_id",
                v: "$data"
              }
            }
          }
        },
        {
          $replaceRoot: {
            newRoot: {
              "$arrayToObject": "$data"
            }
          }
        },
        {
          $project: {
            student: {
              $cond: {
                if: {
                  $isArray: "$student"
                },
                then: {
                  $size: "$student"
                },
                else: "NA"
              }
            },
            teacher: {
              $cond: {
                if: {
                  $isArray: "$teacher"
                },
                then: {
                  $size: "$teacher"
                },
                else: "NA"
              }
            },
            
          }
        }
      ]
    },
    
  },
  {
    $lookup: {
      from: "companys",
      localField: "company",
      foreignField: "_id",
      as: "company",
      
    }
  },
  {
    $unwind: "$company"
  },
  {
    $addFields: {
      "party_org_name": "$company.name"
    }
  },
  {
    $unset: "company"
  },
  {
    $addFields: {}
  }
  ])
     
.then((response) => {
    res.send({ response: response });
    const csvData = json2csvParser.parse(response);
    fs.writeFile("Trip_new.csv", csvData, function (error) {
        if (error) throw error;

    });

})

.catch((err) => {
    console.log(err)
  })
}
);



export default router;


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source