【问题标题】:Invalid operator '$size' in aggregation聚合中的运算符“$size”无效
【发布时间】:2016-11-26 04:28:12
【问题描述】:

我得到以下代码:

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'

我正在使用带有 sublime 文本编辑器的 mongo 版本 2.4.14 和 python 2.7.12。谁能提出解决这个问题的方法,不胜感激。

【问题讨论】:

  • 应该是正确的,这里没有错误。你能发布更多代码吗?
  • Zahrie 你想要哪种类型的代码?我没有为此聚合编写任何代码,因为它给了我一个错误。或者你想要一个来自 mongo 的例子?
  • 你在 python 脚本 .py 中编写了这段代码?
  • 没错。我足够聪明。
  • 检查 db.version() 。我认为您正在运行 pymongo 3.3 而不是 MongoDB 3.3

标签: python mongodb pymongo aggregation-framework


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-21
    • 2011-07-21
    • 1970-01-01
    • 2019-11-20
    • 2021-06-16
    • 2021-02-07
    相关资源
    最近更新 更多