Apache + Python + Mongo:对象ID不相等

时间:2011-09-23 18:10:22

标签: django apache mongodb pymongo

我们在Apache实例中运行两个基于django的应用程序副本。从数据库加载对象时我们有这个python代码:

id = pymongo.objectid.ObjectId(hex_string)
d = self.collection.find_one({ '_id': id })
assert id == d['_id']

在两个应用程序中的一个(无论哪个我们达到第二个),断言失败。我们看过ids,它们是一样的。另外,当我们将其更改为:

assert str(id) == str(d['_id'])

断言传递。在我们的开发机器上(Win 7 64位,django dev服务器而不是Apache),这似乎工作正常。

Stack:Ubuntu 10.04 LTS,Apache 2.2.14,Python 2.6.5,MongoDB 2.0,Pymongo 2.0.1

更新:我们遇到了另一个问题。我们实际上开始将对象称为BSON对象id,并修复了第二个问题。但是,即使使用BSON对象ID,此问题中的问题仍然存在。

1 个答案:

答案 0 :(得分:0)

在黑暗中拍摄,但你没有任何机会使用分片,是吗?我没有对它进行测试,但是如果你在非_id字段上进行分片,似乎有可能有两个具有相同_id的文档。您是自己生成_id值还是让pymongo在插入时为您执行此操作?