Mongodb 使用聚合和管道无法获得正确的结果

Mongodb 使用聚合和管道无法获得正确的结果,mongodb,mongoose,Mongodb,Mongoose,在使用管道和从聚合中获取正确数据方面存在问题 查询我有两个集合,它们都共享一个公共id(eventId),我想用它来“加入”这些集合 收集池中的文档 { "_id": ObjectId("5e1ebbc6cffd4b042fc081ab"), "eventId": "ABC_2020-01-15_40_1", "trackName": "Foo", "type": "bar" } 来自集合竞赛的文档(具有相同eventID的多个竞赛) { "_id": ObjectId("

在使用管道和从聚合中获取正确数据方面存在问题 查询我有两个集合,它们都共享一个公共id(eventId),我想用它来“加入”这些集合

收集池中的文档

{
  "_id": ObjectId("5e1ebbc6cffd4b042fc081ab"),
  "eventId": "ABC_2020-01-15_40_1",
  "trackName": "Foo",
  "type": "bar"
}
来自集合竞赛的文档(具有相同eventID的多个竞赛)

{
  "_id": ObjectId("5e1ebbc6cffd4b042fc081a1"),
  "eventId": "ABC_2020-01-15_40_1",
  "Data": {foo:"bar"}
}
我返回的数据包括races集合中的所有文档,管道似乎没有运行,因为我得到的结果与管道中传入[]的结果相同。我希望得到一些帮助来解决这个问题,因为我只希望结果中两个集合中的eventId相同

const result = await PoolModel.aggregate([

        {
          $match: {
            eventId,
          },
        },
        {
          $lookup: // join two collections
          {
            from: 'races', // races collection
            let: { eventId: '$event.eventId' }, // define vars to use in pipeline
            pipeline: [
                { $match: { $expr: ['$eventId', '$$eventId']  } },

                { $project: projection },
            ],
            as: 'races', // Display in new result as as

          },
        },

      ]);
这是我的结果:

 result: [ { _id: 5e1ebbc6cffd4b042fc081ab,
        eventId: 'ABC_2020-01-15_40_1',
        trackName: 'Foo',
        type: 'bar',
        races:
         [ [Object], // Wrong id 
           [Object], // Wrong id 
           [Object], // Wrong id 
           [Object], // Wrong id 
           [Object], // Wrong id 
           [Object], // Wrong id 
           [Object], // Wrong id 
           [Object], // Correct id
           [Object], // Correct id
           [Object], // Correct id
           [Object], // Correct id
           [Object], // Correct id
           [Object], // Correct id
           [Object], // Correct id
           [Object] ] } ]

在联接集合的管道中,需要一个条件比较运算符(有一个示例在管道中使用它),而您没有给它任何条件比较运算符,因此本质上没有进行过滤

您更愿意将运算符用作

{ '$match': { '$expr': { '$eq': ['$eventId', '$$eventId'] } } },