Как применить фильтр для вывода структуры агрегации Mongo Db?
Я пытаюсь применить условие для вывода агрегации Mongo Db, но до сих пор не понять идею. Вот мои образцы документов:
{
'id':1,
'customerReviews':[5,7,8],
'expertReviews':[9,8,9]
},
{
'id':1,
'customerReview':[6,7,7],
'expertReview':[4,8,9]
}
Так что, если у меня есть требование типа найти все документы, у которых min(customer_review) > 5 -> только второй документ правильный.
Вот моя начальная точка, которая получает минимум (customerReview) документов:
db.getCollection('subscriber').aggregate([
{$unwind:"$customerReviews"},
{"$group":{
"_id":"$_id",
"min_customer_review":{"$min":"$customerReviews"}}}
]);
который производит:
{
"_id" : ObjectId("58ab1d6892bf3194a9719883"),
"min_customer_review" : 5
},
{
"_id" : ObjectId("58ab1d6892bf3194a9719883"),
"min_customer_review" : 6
}
Так как же продолжать применять фильтр для агрегации, чтобы получить все документы с min_customer_review > 5?
Еще один вопрос, может ли он применить вторую агрегацию, например, "получить все фильмы, у которых min_customer_review> 5 или average_expert_reviews > 6"?
Спасибо всем
1 ответ
Ты можешь использовать $redact
,
$redact
просмотреть документ и выполнить $$KEEP
а также $$PRUNE
по критериям запроса.
db.subscriber.aggregate(
[{
$redact: {
$cond: {
if: {
$gt: [{
$min: "$customerReviews"
}, 5]
},
then: "$$KEEP",
else: "$$PRUNE"
}
}
}]
);
Вы можете обернуть больше условий в $or
оператор.
Заменить значение в if
блокировать с
{ $or:[{$gt: [{ $min: "$customerReviews"}, 5 ] }, {$gt: [{ $avg: "$expertReviews"}, 6 ] } ]}