Apache + Python + Mongo: идентификаторы объектов не равны - PullRequest
1 голос
/ 23 сентября 2011

Мы запускаем две копии приложения на основе django в экземпляре Apache.У нас есть этот код Python при загрузке объекта из базы данных:

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

В одном из двух приложений (в зависимости от того, какое нажатие мы выберем вторым) утверждение не выполняется.Мы посмотрели на идентификаторы, и они одинаковы.Плюс, когда мы меняем его на:

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

Утверждение проходит.На наших машинах разработки (Win 7 64-bit, django dev server вместо Apache) это работает нормально.

Стек: Ubuntu 10.04 LTS, Apache 2.2.14, Python 2.6.5, MongoDB 2.0, Pymongo2.0.1

Обновление: Мы столкнулись с другой проблемой, подобной этой.Мы фактически начали ссылаться на объекты как идентификаторы объектов BSON, и это решило вторую проблему.Однако проблема в этом вопросе все еще возникает, даже с использованием идентификаторов объектов BSON.

1 Ответ

0 голосов
/ 13 октября 2011

Вид выстрела в темноте, но вы случайно не используете шард, не так ли? Я не проверял это, но кажется, что есть возможность иметь два документа с одинаковым _id, если вы осколкуете в поле не _id. Вы сами генерируете значения _id или позволяете pymongo сделать это для вас на вставке?

...