Invalid operator '$size' in aggregation

2019-03-04 17:50发布

问题:

I got the following piece of code:

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)

and this is worked for the original programmer who wrote and tested it code result while testing. But when I try to run it I'm getting this error:

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

I'm using mongo version 2.4.14 and python 2.7.12 with the sublime text editor. Could anyone suggest ways to solve this problem, it would be appreciated.

回答1:

The reason is because the $size array aggregation operator is new in MongoDB 2.6 and you are actually running MongoDB 2.4.

I suggest you upgrade your MongoDB server to at least 3.0. But if for some reason you don't want to upgrade now, you will need to $unwind the "players" array and $group by "_id" then return the count using the $sum accumulator operator.

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