Mongodb 如何使用pymongo获取数组中所有对象中特定元素的和

Mongodb 如何使用pymongo获取数组中所有对象中特定元素的和,mongodb,pymongo,Mongodb,Pymongo,下面是我的收藏 [{'_id': ObjectId('603e9cc2784fa0d80d8672cd'), 'name': 'balaji', 'items': [{'price': 1, 'price_range': 'A'}, {'price': 6, 'price_range': 'B'}, {'price': 4, 'price_range': 'C'}]}] 因此,在上面的集合中,我们只能看到一条记录,它包含一个带有名称项的数组,而该数组包含具有price和price_range属

下面是我的收藏

[{'_id': ObjectId('603e9cc2784fa0d80d8672cd'),
'name': 'balaji',
'items': [{'price': 1, 'price_range': 'A'},
{'price': 6, 'price_range': 'B'},
{'price': 4, 'price_range': 'C'}]}]
因此,在上面的集合中,我们只能看到一条记录,它包含一个带有名称项的数组,而该数组包含具有price和price_range属性的对象,我可以知道如何获取该数组中所有价格的总和吗

aggregation_string = [{"$match":{"name": "balaji"

            }},{ "$group": {
 

              "_id":  None,
             "count": { "$sum": "$items.price" }
             }}]
db.sample_collection1.aggregate(aggregation_string) 

我的计数是0。有人能在这里帮助我吗。

在您的示例中,因为您不需要对对象进行分组,您可以简单地通过以下方式投影总和:

db.collection.aggregate([
  {
    "$match": {
      "name": "balaji"
    }
  },
  {
    "$project": {
      "name": 1,
      "priceTotal": {
        "$sum": "$items.price"
      }
    }
  },
])
它应该在MongoDB3.2中运行,我认为这是最好的方式

但如果您确实需要使用$group,则必须这样做:

db.collection.aggregate([
  {
    "$match": {
      "name": "balaji"
    }
  },
  {
    "$group": {
      "_id": null,
      "count": {
        "$sum": {
          "$sum": "$items.price"
        }
      }
    }
  }
])
是您的$sum查询不完整。 或与解卷操作员一起,以避免执行两倍于$sum的操作:

db.collection.aggregate([
  {
    "$match": {
      "name": "balaji"
    }
  },
  {
    "$unwind": "$items",
  },
  {
    "$group": {
      "_id": null,
      "count": {
        "$sum": "$items.price"
      }
    }
  }
])
感谢您的帮助:),它通过使用您的项目查询工作。