Как получить сумму всех элементов в массиве - PullRequest
0 голосов
/ 28 января 2019

Хорошо, у меня есть коллекция объектов, которые выглядят так:

{  
 "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, извините, если вопрос повторяется, но мне не удалось найти ничего полезного.

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Вы можете использовать агрегацию

db.collection.aggregate([
  { "$match": {
    "$expr": {
      "$gte": [ 
        { "$sum": "$grades.score" }, 
        70
      ]
    }
  }}
])

или запрос поиска

db.collection.find({
  "$expr": {
    "$gte": [ 
      { "$sum": "$grades.score" },
      70
    ]
  }
})
0 голосов
/ 28 января 2019

Вы можете использовать $ redu * , чтобы вычислить сумму в вашем массиве и поместить ее в $ expr , попробуйте:

db.col.aggregate([
    {
        $match: {
            $expr: {
                $gte: [ 
                    { $reduce: { input: "$grades", initialValue: 0, in: { $add: [ "$$value", "$$this.score" ] } } }, 
                    70 
                ]
            }
        }
    }
])
...