Обновление : этот вопрос был задан в отношении MongoDB 1.8.x, и принятое решение относится к 1.8.Однако обратите внимание, что Mongo 2.x внес изменения в сообщения об ошибках, чтобы вы могли указать, какие поля генерируют ошибки при обновлении, а также при вставке (см. Комментарии Кайла и Ремона ниже).
Есть ли способ попытаться установить монго и, если существует уникальное нарушение индекса, узнать, какое поле вызывает проблему - все в одной операции базы данных?
ДляНапример, скажем, у меня есть коллекция customers
со свойствами _id
и name
.Кроме того, скажем, уникальный индекс существует для name
, чтобы гарантировать, что никакие два документа customer
никогда не будут иметь одинаковый name
.
В настоящее время я делаю two операций с базой данных для выполнения upsert:
- Запрос
customers
, чтобы узнать, существует ли уже документ с именем, которое я собираюсь вставить / обновить. - Выполнитеupsert, если конфликта не существует.
Я бы хотел сделать это за одну операцию и, если есть ошибка, узнать, какое поле вызывает проблему.
Это возможно, если операция заключается в создании нового документа.Монго возвращает ошибку E11000 duplicate key error index: {index name}
.Это что-то вроде хака, но я могу использовать регулярное выражение для анализа имени индекса (которое в моем случае содержит имя поля).
Однако, когда обновляет aВ документе об ошибке отсутствует информация об индексе или поле.Это просто "E11001 duplicate key on update
".
Есть ли у кого-нибудь еще предложения по поводу умных способов делать апперсеты и знать, какие поля вызывают проблемы с уникальными индексами, если это необходимо?В надежде избежать сохраненных на сервере функций JavaScript ...