Mongodb Mongo Db聚合框架的输出如何应用过滤器?
我试图为Mongo Db聚合的输出应用条件,但仍然没有弄清楚这个想法。以下是我的示例文档:Mongodb Mongo Db聚合框架的输出如何应用过滤器?,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我试图为Mongo Db聚合的输出应用条件,但仍然没有弄清楚这个想法。以下是我的示例文档: { 'id':1, 'customerReviews':[5,7,8], 'expertReviews':[9,8,9] }, { 'id':1, 'customerReview':[6,7,7], 'expertReview':[4,8,9] } db.getCollection('subscriber').aggregate([ {$unwind:"$customerReviews"},
{
'id':1,
'customerReviews':[5,7,8],
'expertReviews':[9,8,9]
},
{
'id':1,
'customerReview':[6,7,7],
'expertReview':[4,8,9]
}
db.getCollection('subscriber').aggregate([
{$unwind:"$customerReviews"},
{"$group":{
"_id":"$_id",
"min_customer_review":{"$min":"$customerReviews"}}}
]);
因此,如果我有一个像查找所有文档这样的需求,它的min(customer\u review)>5->只有第二个文档是正确的
以下是我获取文档最小值(customerReview)的初始点:
{
'id':1,
'customerReviews':[5,7,8],
'expertReviews':[9,8,9]
},
{
'id':1,
'customerReview':[6,7,7],
'expertReview':[4,8,9]
}
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
}
那么,如何继续对聚合输出应用过滤器,以获得所有最小客户审核>5的文档
还有一个问题,它是否能够应用第二个聚合,比如“获取所有最低客户评论>5或平均专家评论>6的电影”
谢谢大家您可以使用
$redact
$redact
浏览文档并对查询条件执行$$KEEP
和$$PRUNE
db.subscriber.aggregate(
[{
$redact: {
$cond: {
if: {
$gt: [{
$min: "$customerReviews"
}, 5]
},
then: "$$KEEP",
else: "$$PRUNE"
}
}
}]
);
您可以在$或运算符中包装更多条件
将if
块中的值替换为
{ $or:[{$gt: [{ $min: "$customerReviews"}, 5 ] }, {$gt: [{ $avg: "$expertReviews"}, 6 ] } ]}
非常感谢,所以如何对列表中的每个元素执行条件,如“至少1个专家评审>8”。我尝试:{$or:[{$gt:[{$min:$customerReviews},5]},{expertReviews:{$elemMatch:{$gt:8}}}}]},但它返回了无法识别的表达式$elemMatch-InvalidPipelineOperator。最后一个问题:所有这些类型的查询都可以使用BasicDbObject for Java完成,对吗?不客气。java驱动程序支持所有操作$elemmatch
仅在$match
阶段有效。我想不出在聚合管道中有任何类似的操作符。