2014-10-20 31 views
7

Tôi có một tập hợp các mục trong goals bộ sưu tập mà trông như thế này:MongoDB tổng hợp truy vấn/nhóm/tổng dịch sang pymongo truy vấn

{"user": "adam", "position": "attacker", "goals": 8} 
{"user": "bart", "position": "midfielder", "goals": 3} 
{"user": "cedric", "position": "goalkeeper", "goals": 1} 

tôi muốn để tính toán một tổng của tất cả các mục tiêu. Trong MongoDB shell tôi làm như sau:

> db.goals.aggregate([{$group: {_id: null, total: {$sum: "$goals"}}}]) 
{ "_id" : null, "total" : 12 } 

Bây giờ tôi muốn làm tương tự trong Python bằng pymongo. Tôi đã thử sử dụng cả hai db.goals.aggregate()db.goals.group(), nhưng không thành công cho đến nay.

truy vấn làm việc không:

> query = db.goals.aggregate([{"$group": {"_id": None, "total": {"$sum": "$goals"}}}]) 
{u'ok': 1.0, u'result': []} 

> db.goals.group(key=None, condition={}, initial={"sum": "goals"}, reduce="") 
SyntaxError: Unexpected end of input at $group reduce setup 

Bất kỳ ý tưởng làm thế nào để làm điều này?

Trả lời

11

Chỉ cần sử dụng ống với tổng hợp.

pipe = [{'$group': {'_id': None, 'total': {'$sum': '$goals'}}}] 
db.goals.aggregate(pipeline=pipe) 

Out[8]: {u'ok': 1.0, u'result': [{u'_id': None, u'total': 12.0}]} 
Các vấn đề liên quan