В pymongo, когда поймано DuplicateKeyError
, что это правильный способ узнать дублирующее значение за исключением?Получите дублирующее значение на DuplicateKeyError
В настоящее время я делаю это
try:
db.coll.insert({key: ['some_value', 'some_value_1']})
except pymongo.errors.DuplicateKeyError, e:
dups = re.findall(r'\{\ +:\ +"(.*)"\ +\}$', e.message)
if len(dups) == 1:
print dups[0]
Это, кажется, работает, но есть ли более простой способ, как
try:
db.coll.insert({key: ['some_value', 'some_value_1']})
except pymongo.errors.DuplicateKeyError, e:
print e.dup_val
EDIT
Это параллельное приложение, так что проверить дубликаты прежде чем вставка может завершиться неудачей.
Поле представляет собой массив, поэтому трудно определить, какой из них является дублирующимся значением.
Почему бы не проверить, если ключ уже присутствует первым? Вместо управления потоком через исключения? –
@InbarRose Иногда ключ может отсутствовать при проверке, но затем сразу же вставляется другим процессом/нитью ... – neuront
Это абсолютно актуальная проблема (вы должны объяснить это в своем вопросе). Кроме того, почему вы не можете просто получить доступ к db, используя ключ, который вы намеревались использовать изначально? 'DuplicateKeyError' означает, что ключ тот же, поэтому у вас уже есть ключ, тогда вы можете просто получить доступ к его значению. –