Соединение / поиск MongoDB не работает при использовании конвейера

#mongodb #mongodb-query #aggregation-framework

#mongodb #mongodb-запрос #aggregation-framework

Вопрос:

используя соединение в MongoDB, я могу получить нужные мне значения

 (await this.ideasCollection).aggregate([
    {
        $match: { userId, deleted: { $ne: true } },
    },
    {
        $lookup: {
            from: 'teams',
            localField: '_id',
            foreignField: `ideas.daily.ideaId`,
            as: 'teams',
        },
    },
])
 

но когда я пытаюсь использовать конвейер, чтобы получить меньше полей (используя $project), это не работает

 (await this.ideasCollection).aggregate([
    {
        $match: { userId, deleted: { $ne: true } },
    },
    {
        $lookup: {
            from: 'teams',
            let: { ideaId: '$_id' },
            pipeline: [
                { $match: { $expr: { $eq: ['$ideas.daily.ideaId', '$ideaId'] } } },
                { $project: { _id: 1, name: 1 } },
            ],
            as: 'teams',
        },
    },
])
 

Есть ли какой-то трюк, чтобы заставить второй вариант работать?

Вот структура команд

 {
    "_id": { "$oid": "58948652ab5f580010faeb44" },
    "name": "My team",
    "ideas": {
        "daily": [
            { "ideaId": { "$oid": "5b6d913e3e552800260904e1" }, "ordinal": 0 },
            { "ideaId": { "$oid": "5bbbc93459914f0013e3c522" }, "ordinal": 1 },
        ]
    }
}
 

Спасибо

Комментарии:

1. Покажите образец документа с полем ideas.daily.ideaId .

2. Поскольку daily это массив, попробуйте изменить $expr его на этот: $in: ['$$ideaId', '$ideas.daily.ideaId']

3. Я получаю $in требуется массив в качестве второго аргумента.Спасибо