TypeError:update()为参数'upsert'

时间:2015-09-15 15:35:27

标签: python django mongodb pymongo

我正在编写一些Python代码来更新比赛的最后一个回填日期。我可以在mongo shell中手动执行此操作,但是当我尝试将查询转换为pymongo语法时,出现问题。

代码:

    ShoutletContestConfig.objects().update(
        { '_id': contest },
        { '$set': { 'config.submission.twitter_retweet_last_backfilled': backfill_date } },
        **{ 'upsert': False }
    )

ShoutletContestConfig是一个mongo Document子类。)

错误:

TypeError: update() got multiple values for argument 'upsert'

尝试缓解:

  • 省略upsert参数(嘿,mongo shell足够聪明,可以选择默认值)。当我在pymongo中执行此操作时,它会抱怨查询缺少upsert参数。
  • 字面输入upsert=False而非dict splat,以防万一。不,同样的错误。
  • pymongo API文档对update()的正确语法不明确;他们只是说'使用Django语法',非常无益。
  • 将pymongo更新为2.8 / 2.9。同样的错误。遗憾的是,3.0与我们的代码库不兼容。
  • 将mongoengine更新为0.9 / 0.10。同样的错误。

系统:

  • pymongo 2.7
  • mongoengine 0.8.8
  • python 3.3.6
  • mongo 2.4.9
  • Mac OS X 10.10.5

1 个答案:

答案 0 :(得分:0)

需要双重强调的Django式语法。

    ShoutletContestConfig.objects().filter(id=contest).update(
        set__config__submission__twitter_retweet_last_backfilled=backfill_date
    )