Как получить доступ к значениям во вложенных документах в MongoDB? - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь найти среднюю продажу каждой консоли xbox, ps4 и wii.Я работаю с вложенными документами и пытаюсь получить доступ к типу для фильтрации "sell", используя db.console.find ({"market.type": "sell"});но в итоге я получаю значения типа «онлайн».

Document 1:
_id:("111111111111111111111111")
market:Array
   0:Object
      type:"sell"
      console:"Xbox"
      amount:399
   1:Object
      type:"online"
      console:"PS4"
      amount:359
   2:Object
      type:"sell"
      console:"xbox"
      amount:349

1 Ответ

2 голосов
/ 14 марта 2019

Поскольку вам необходимо отфильтровать вложенные документы из документов, просто find не будет работать для фильтрации вложенных документов.

Вы должны использовать конвейер агрегации , как показано ниже:

    > db.st9.aggregate([
    {
        $unwind:"$market"
    }, 
    {
        $match: {"market.type":"sell"}
    }, 
    {
        $group: {_id:"$market.console", "avg": {$avg:"$market.amount"}, "count": {$sum:1}, "totalSum": {$sum: "$market.amount"} }
    } 
])

Вывод:

{ "_id" : "PS4", "avg" : 300, "count" : 1, "totalSum" : 300 }
{ "_id" : "Xbox", "avg" : 359, "count" : 3, "totalSum" : 1077 }
>

Для получения дополнительной информации о проверке конвейера агрегации ниже официальногоДокументация mongo db:

  1. $ unwind
  2. $ match
  3. $ group
...