#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 требуется массив в качестве второго аргумента.Спасибо