我试图为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" ?
谢谢大家
答案 0 :(得分: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 ] } ]}