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"
}
}
}
])
感谢您的帮助:),它通过使用您的项目查询工作。