相信存在pymongo这使得不可能运行findandupdate查询中的错误(或者,至少,文档)。

下面是发生了什么。当我运行:

    result = db.command({
        'findandmodify': 'my_collection',
        'query': {'foo': 'bar'},
        'update': {'$set': {'status': 'queued'}},
    })

这实际上被发送到服务器的查询是:

{ 'query': {'foo': 'bar'}, 'findandmodify': 'my_collection', … }

注意,query参数是第一,和findandmodify第二

但是,这将导致服务器呕吐:

OperationFailure: command { 'query': {'foo': 'bar'}, 'findandmodify': 'my_collection', … } failed: no such cmd

由于服务器期望findandmodify为第一(BSON类型的字典中,很显然,订购)。

有没有解决有关此?

有帮助吗?

解决方案

对于没有该语言的内置排序字典型蒙戈驱动器包括一个。在蟒那是SON类型: HTTP://api.mongodb .ORG /蟒/ 1.4%2B / API / pymongo / son.html 。您将需要使用所有的命令。

如果还是失败,请确保您使用的是最新版本的数据库作为findandmodify是一项新功能。

其他提示

一种解决方法可以是构造命令的JavaScript版本并把它传递到db.eval()。

db.eval('db.runCommand({"findandmodify": "my_collection", "query": {"foo": "bar"}, "update": {"$set": {"status": "queued"}},})')

问题是,亚历克斯提到,Python的类型的字典没有顺序,因此你需要更多或更少的手动生成的字符串。

请参阅PyMongo文件:

  

请注意命令文件中的键的顺序是显著(该   “动词”必须先来),所以需要多个密钥命令(例如   findandmodify)应采用SON的实例,或者一个字符串,kwargs   代替Python字典。

http://api.mongodb.org/python/2.1/ API / pymongo / database.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top