2015-02-13 2 views
0

Я пытаюсь вставить документы в MongoDB, но я хочу иметь только уникальные документы и всякий раз, когда сталкиваюсь с дублирующимся документом, просто игнорируйте его, если он уже существует и переходит к следующему. Я использую следующий код, но, видимо, он не работает.Вставка документов в MongoDB и игнорирование дубликатов документов

ответ

2

Если вы действительно хотите игнорировать эти, вероятно, лучше всего сделать это в коде, хотя это может быть не так легко в среде с несколькими клиентами.

Флаг dropDups является параметром индекса только, поэтому он удаляет дубликаты, которые он находит при создании индекса. После этого флаг будет игнорироваться для вставок, потому что это даже не параметр индекса.

Лучшим способом, хотя и не совсем поведением, которое вы ищете, является использование upserts, то есть операций, которые вставляют документ, если он еще не представлен, и обновляют его, если ранее был обнаружен документ. Преимущество состоит в том, что это идемпотентная операция (стратегия игнорирования которой отсутствует).

+0

Но C# не поддерживает upsert.Does? – Eager

+0

Конечно. Драйвер C# поддерживает все функции MongoDB. Существует даже вспомогательный метод, Save(), см. Http://docs.mongodb.org/ecosystem/tutorial/use-csharp-driver/#save-tdocument-method – mnemosyn

+0

Я читаю файл CSV и разбираю его tp Bson document , В моем случае, как я могу использовать upsert? – Eager

0

Так что я использовал следующий код, но я вставляю вставку в try {} и catch {continue}. Это решило проблему.

+0

Это очень хаки, в лучшем случае ... Неоднократно ломающиеся исключения могут быть несколько дорогим качеством. Кроме того, он будет игнорировать все * другие * ошибки, которые могли произойти. Наконец, вам может потребоваться больше одной простой вставки в будущем, поэтому вы будете собирать все больше и больше обновлений в блоках catch/ignore, чтобы вся база кода заражалась взломом ... – mnemosyn

Смежные вопросы