【发布时间】:2011-01-21 22:57:02
【问题描述】:
我相信 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', ... } 失败:没有这样的 cmd
因为服务器希望 findandmodify 排在第一位(显然,BSON dicts 是有序的)。
有什么解决办法吗?
【问题讨论】:
-
你运行的是什么版本的 Mongo?
-
Python
dicts 没有内在顺序,因此您对“第一”和“第二”的评论在 Python 语言的上下文中完全是一派胡言。请澄清! -
@Alex 是的,这就是问题所在:Python 的 dicts 是无序的,但(显然)BSON dicts(它们被称为 dicts 吗?)是。
-
不知道 BSON。在与 Javascript 规范匹配的 JSON 中,对象(相当于字典,除了键必须是特定的字符串)是 not 有序的。
-
好的,所以 MongoDB 文档 (mongodb.org/display/DOCS/BSON) 对此事并不完全清楚……但维基百科 (en.wikipedia.org/wiki/BSON) 建议 BSON 对象是有序的,Mongo 实现似乎建议一样。