pymongo DuplicateKeyError-во время upsert
Я заметил странное поведение библиотеки пимонго. Когда я запускаю следующий код из моего модульного теста, все в порядке (2 документа хранятся в их коллекции и установлен _id).
property_db_item = {#"_id": str(bson.ObjectId()),"url": item['url'],
"price": item['price'],"rooms": item['rooms'],
"area": item['area'],"flor": item['flor'],
"street": item['street'],"city": item['city'],
"region": item['region'],"country": item['country'],
"photoUrls": item['photoUrls'],"updatedAt": str(date)}
db.properties.update({"url": item['url']}, property_db_item, upsert=True)
db.property_trends.update(
{"url": item['url'], "date": date.strftime("%Y-%m")},
{
"$setOnInsert": {"url": item['url'], #"_id": str(bson.ObjectId())],
"date": date.strftime("%Y-%m")},
"$addToSet": {"prices": {date.strftime("%Y-%m-%d"): item['price']}}
}, upsert=True)`
Но когда я выполняю его из терминала (scrapy crawl myParser), и получаю эту ошибку:
DuplicateKeyError (подробности ["err"]) pymongo.ошибки.DuplicateKeyError: e11000 duplicate key error index: local.свойства.$id DUP ключ: {: null }
1 ответ:
Это существующая Ошибка . Upserts to
local
database fail withE11000 duplicate key error index: local.properties.$_id_ dup key: { : null }
исключение.Вот пример:
> use local switched to db local > db.properties.update({'url': 'test1'}, {'url2': 'test2'}, upsert=true) > db.properties.update({'url': 'test1'}, {'url2': 'test2'}, upsert=true) E11000 duplicate key error index: local.properties.$_id_ dup key: { : null } > use local2 switched to db local2 > db.properties.update({'url': 'test1'}, {'url2': 'test2'}, upsert=true) > db.properties.update({'url': 'test1'}, {'url2': 'test2'}, upsert=true)