如何访问MongoDB中嵌套文档中的值?

时间:2019-03-14 01:27:57

标签: mongodb mongodb-query aggregation-framework

我试图找到每个控制台xbox,ps4和wii的平均销售量。我正在使用嵌套文档,并且尝试使用db.console.find({{market.type“:” sell“});访问类型以过滤“ 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 个答案:

答案 0 :(得分:2)

由于您需要从文档中过滤子文档,因此简单的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