После многих попыток у меня не получится хорошей условной агрегации моих коллекций.
Я использую две коллекции:
рас , которые имеют коллекцию рецензий .
Мне нужно получить для моего второго конвейера только опубликованные рецензии .Я не хочу использовать $project
.Можно ли использовать только $match
?Когда я использую localField, foreignField, он работает отлично, но мне нужно фильтровать только опубликованные обзоры.Я так много боролся с этим, я не понимаю, почему let
не дает мне иностранный ключ.Я пробовал: _id
, $reviews
и т. Д.
Мой $lookup
выглядит следующим образом:
{
$lookup: {
from: "reviews",
as: "reviews",
let: { reviewsId: "$_id" },
pipeline: [
{
$match: {
$expr: {
$and: [
// If I comment the next line, it give all the reviews to all the races
{ $eq: ["$_id", "$$reviewsId"] },
{ $eq: ["$is_published", true] }
]
}
}
}
]
// localField: "reviews",
// foreignField: "_id"
}
},
Пример гонки :
{
"description":"Nice race",
"attendees":[
],
"reviews":[
{
"$oid":"5c363ddcfdab6f1d822d7761"
},
{
"$oid":"5cbc835926fa61bd4349a02a"
}
],
...
}
Пример обзора :
{
"_id":"5c3630ac5d00d1dc26273dab",
"user_id":"5be89576a38d2b260bfc1bfe",
"user_pseudo":"gracias",
"is_published":true,
"likes":[],
"title":"Best race",
"__v":10,
...
}
Я скоро сойду с ума: '(... Как этого добиться?