无效的运营商' $ size'在聚合中

时间:2016-07-22 09:59:28

标签: python mongodb pymongo aggregation-framework

我得到了以下代码:

from pymongo import MongoClient
client = MongoClient('ipOfServer')
db = client.admin
db.authenticate('login', 'password',
source='admin_')
heh = list(db.events.aggregate(
    [
        {"$match": {"status": 'start'}},
        {"$group": {"_id": "$eventName", "players": {"$addToSet": "$uid"}}},
        {"$project": {"_id": 1, "Count": {"$size": "$players"}}}
    ]))
print(heh)

这适用于编写并测试它code result while testing的原始程序员。但是当我尝试运行它时,我收到了这个错误:

pymongo.errors.OperationFailure: exception: invalid operator '$size'

我使用mongo版本2.4.14和python 2.7.12与sublime文本编辑器。任何人都可以提出解决这个问题的方法,我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

原因是因为$size数组聚合运算符是MongoDB 2.6中的新运算符,并且您实际上正在运行MongoDB 2.4。

我建议你将MongoDB服务器升级到至少3.0。但如果由于某种原因你现在不想升级,你需要$unwind"玩家"数组和$group by" _id"然后使用$sum累加器运算符返回计数。

heh = list(db.events.aggregate(
    [
        {"$match": {"status": 'start'}},
        {"$group": {"_id": "$eventName", "players": {"$addToSet": "$uid"}}},
        {"$unwind": "$players"},
        {"$group": {"_id": "$_id", "Count": {"$sum": 1}}},
    ]))