在MongoDB中,我正在寻找包含至少5条餐厅评论的文档。 我试过在$ match上添加一个过滤器,例如:
stat_valleys
但是,这将为我提供评论评分至少为5或更高的文档,而我希望评论数量至少为5。
set.seed(1)
x <- 1:10
y <- runif(10)
# Maxima
x[ggpmisc:::find_peaks(y)]
[1] 4 7
y[ggpmisc:::find_peaks(y)]
[1] 0.9082078 0.9446753
# Minima
x[ggpmisc:::find_peaks(-y)]
[1] 5
y[ggpmisc:::find_peaks(-y)]
[1] 0.2016819
# Plot
ggplot(data = data.frame(x, y), aes(x = x, y = y)) + geom_line() + stat_peaks(col = "red") + stat_valleys(col = "green")
这就是我得到的:
{"grades.score: {$gt: 4}}
这就是我需要的:
db.restaurants.aggregate([
... {"$match":
... {"$and":[
... {"borough":"Bronx"},
... { "cuisine": "American "},
... {"address.zipcode":"10467"}]}},
... {"$group":
... {"_id":
... {"name" : "$name",
... "grades.score" : "$grades.score"}}}])
答案 0 :(得分:1)
您可以根据您的示例进行尝试:
db.restaurants.aggregate([{
"$match": {
"$and": [{
"borough": "Bronx"
},
{
"cuisine": "American "
},
{
"addresszipcode": "10467"
}
]
}
},
{
"$group": {
"_id": {
"name": "$name",
"score": "$grades.score",
}
}
},
{
$match: {
$expr: {
$gte: [{
$size: "$score"
}, 5]
}
}
}
])
使用最终的$ match与$ expr来执行聚合表达式
答案 1 :(得分:0)
非常感谢Julien。
最后,我改用$ project解决了它。很抱歉在找到解决方案之前不回复。
pipeline1 = []
step1 = {"$match":{"$and":[{"borough": borough},{ "cuisine": cuisine},{"address.zipcode": zipcode}]}}
pipeline1.append(step1)
step2 = {"$project": { "_id":0, "name":1, "fiveOrMore": { "$gte": [ {"$size":"$grades.score" }, 5 ] }, "grades.score" :1} }
pipeline1.append(step2)
step3 = {"$match": { "fiveOrMore" : True }}
pipeline1.append(step3)
step4 = {"$unwind": "$grades"}
pipeline1.append(step4)
step5 = {"$group":{"_id": "$name", "averageReview": {"$avg": "$grades.score"}}}
pipeline1.append(step5)