Чтобы предотвратить вставку дубликатов, вам необходим уникальный индекс , который можно создать в коде C #:
public void CreateIndex()
{
var options = new CreateIndexOptions() { Unique = true };
var field = new StringFieldDefinition<Model>(nameof(Model.Email));
var indexDefinition = new IndexKeysDefinitionBuilder<Model>().Ascending(field);
Collection.Indexes.CreateOne(indexDefinition, options);
}
Затем вы можете вставить несколько документов, используя операцию BulkWrite . Проблема в том, что по умолчанию обработка будет остановлена, когда первая операция вставки завершится неудачно (что происходит при попытке вставить дубликат), и вы получите исключение в C #. Вы можете изменить это, установив параметр ordered
на false
, что означает, что все вставки будут обрабатываться «параллельно», и вы получите одно исключение, которое объединяет все неудачные вставки. Это исключение имеет тип MongoBulkWriteException
, и вы можете попытаться его перехватить. Таким образом, вы можете попробовать следующий метод:
public void InsertData(List<Model> data)
{
var writeOps = data.Select(x => new InsertOneModel<Model>(x));
try
{
Collection.BulkWrite(writeOps, new BulkWriteOptions() { IsOrdered = false });
}
catch (MongoBulkWriteException ex)
{
// will be thrown when there were any duplicates
}
}