2015-03-13 25 views
3

我在MongoDB的查询怎么写的MongoDB查询的Python为db.collection.group()

db.BH.group({ 
"key": { 
    "AccountId": true, 
}, 
"initial": { 
    "count": 0 
}, 
"reduce": function(obj, prev) { 
    if (true != null) if (true instanceof Array) prev.count += true.length; 
    else prev.count++; 
}, 
"cond":  
    {"$or":[{"Url":{"$regex":"(google)"}},{"Url":{"$regex":"(facebook)"}}]} 
}); 

查询是MongoDB中壳牌(Robomongo)工作正常工作。

我写了相同的查询python。

db.BH.group({ 
"key": { 
    "AccountId": True, 
}, 
"initial": { 
    "count": 0 
}, 
"reduce": "function(obj, prev) {" 
    "if (true != null) if (true instanceof Array) prev.count += true.length;" 
    "else prev.count++;" 
"}", 
"cond": {"$or":[{"Url":{"$regex":"(google)"}},{"Url":{"$regex":"(facebook)"}}]} 
}) 

但是错误即将到来的查询。

TypeError: group() takes at least 5 arguments (2 given) 

我试图从以下网站给出的(URL)

http://blog.pythonisito.com/2012/05/aggregation-in-mongodb-part-1.html

的方法解决了错误,但同样的错误仍然存​​在。

回答

1

PyMongo中group的语法不同。每个键keyinitial等在JavaScript中的参数对象是Python中的关键字参数:

db.BH.group(key = , initial = , reduce = , cond =) 
+0

我更正了语法,但仍然出现错误** TypeError:group()至少需要5个参数(给出4个参数)** @wdberkeley – abhyuday 2015-03-16 19:20:55

0
group(key, condition, initial, reduce, finalize=None, **kwargs) 

你缺少了集团化运作的最后一个参数“敲定”。使用finalize = None应该可以解决问题。

db.BH.group({ 
    { 
     "AccountId": True, 
    }, 
    {"$or":[{"Url":{"$regex":"(google)"}},{"Url":{"$regex":"(facebook)"}}]}, 
    { 
     "count": 0 
    }, 
    "function(obj, prev) {" 
     "if (true != null) if (true instanceof Array) prev.count += true.length;" 
     "else prev.count++;" 
    "}", 
    None 
})