好的,所以我有一个看起来像这样的对象集合:
{
"address":{
"building":"1007",
"coord":[
-73.856077,
40.848447
],
"street":"Morris Park Ave",
"zipcode":"10462"
},
"borough":"Bronx",
"cuisine":"Bakery",
"grades":[
{
"date":{
"$date":1393804800000
},
"grade":"A",
"score":2
},
{
"date":{
"$date":1378857600000
},
"grade":"A",
"score":6
},
{
"date":{
"$date":1358985600000
},
"grade":"A",
"score":10
},
{
"date":{
"$date":1322006400000
},
"grade":"A",
"score":9
},
{
"date":{
"$date":1299715200000
},
"grade":"B",
"score":14
}
],
"name":"Morris Park Bake Shop",
"restaurant_id":"30075445"
}
这只是这些元素的一个元素。例如,如何编写MongoDB查询,以便获得分数总和大于70
的餐厅?
我是MongoDB的新手,很抱歉,如果重复该问题,但我没有找到有用的东西。
答案 0 :(得分:2)
您可以使用$reduce来计算数组中的总和并将其放入$expr的内部,请尝试:
db.col.aggregate([
{
$match: {
$expr: {
$gte: [
{ $reduce: { input: "$grades", initialValue: 0, in: { $add: [ "$$value", "$$this.score" ] } } },
70
]
}
}
}
])
答案 1 :(得分:1)
您可以使用聚合
db.collection.aggregate([
{ "$match": {
"$expr": {
"$gte": [
{ "$sum": "$grades.score" },
70
]
}
}}
])
或使用查找查询
db.collection.find({
"$expr": {
"$gte": [
{ "$sum": "$grades.score" },
70
]
}
})