Ошибки уникального индекса MongoDB: как узнать, в каком поле возникла ошибка? - PullRequest
4 голосов
/ 12 декабря 2011

Обновление : этот вопрос был задан в отношении MongoDB 1.8.x, и принятое решение относится к 1.8.Однако обратите внимание, что Mongo 2.x внес изменения в сообщения об ошибках, чтобы вы могли указать, какие поля генерируют ошибки при обновлении, а также при вставке (см. Комментарии Кайла и Ремона ниже).

Есть ли способ попытаться установить монго и, если существует уникальное нарушение индекса, узнать, какое поле вызывает проблему - все в одной операции базы данных?

ДляНапример, скажем, у меня есть коллекция customers со свойствами _id и name.Кроме того, скажем, уникальный индекс существует для name, чтобы гарантировать, что никакие два документа customer никогда не будут иметь одинаковый name.

В настоящее время я делаю two операций с базой данных для выполнения upsert:

  1. Запрос customers, чтобы узнать, существует ли уже документ с именем, которое я собираюсь вставить / обновить.
  2. Выполнитеupsert, если конфликта не существует.

Я бы хотел сделать это за одну операцию и, если есть ошибка, узнать, какое поле вызывает проблему.

Это возможно, если операция заключается в создании нового документа.Монго возвращает ошибку E11000 duplicate key error index: {index name}.Это что-то вроде хака, но я могу использовать регулярное выражение для анализа имени индекса (которое в моем случае содержит имя поля).

Однако, когда обновляет aВ документе об ошибке отсутствует информация об индексе или поле.Это просто "E11001 duplicate key on update".

Есть ли у кого-нибудь еще предложения по поводу умных способов делать апперсеты и знать, какие поля вызывают проблемы с уникальными индексами, если это необходимо?В надежде избежать сохраненных на сервере функций JavaScript ...

1 Ответ

3 голосов
/ 12 декабря 2011

Для вставки сообщение об ошибке разбора - ваш лучший выбор. К сожалению, для обновления нет лучшего способа, кроме как попытаться проверить существующие данные в коллекции. Не стесняйтесь поднять повышение на https://jira.mongodb.org, хотя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...