Mongodb 使用聚合和管道无法获得正确的结果
在使用管道和从聚合中获取正确数据方面存在问题 查询我有两个集合,它们都共享一个公共id(eventId),我想用它来“加入”这些集合 收集池中的文档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": 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'] } } },