Подтвердить что ты не робот

Добавление пакетного обновления в MongoDB.

Похоже, MonogoDB не поддерживает пакетное обновление. Это верно?

Если нет, как бы вы решили добавить пакетный upsert с существующим API, который является наиболее эффективным? Поддерживает ли пакетный пакет даже смысл для mongo db?

4b9b3361

Ответ 1

Если вы перейдете на MongoDB 2.6, вы можете воспользоваться новыми массовыми операциями:

Bulk.find(<query>).upsert().update(<update>);
Bulk.find(<query>).upsert().updateOne(<update>);
Bulk.find(<query>).upsert().replaceOne(<replacement>);    

Ответ 2

Существует утилита mongoimport с флагом upsert. Что-то вроде

mongoimport -c myitems -d mydb --upsert items.json

Может ли это достичь того, что вы ищете?

По умолчанию используется upsert на основе _id, но вы можете изменить это, используя флаг -upsertFields, зарегистрированный здесь.

http://docs.mongodb.org/manual/reference/mongoimport/#cmdoption-mongoimport--upsertFields

Ответ 3

Для С# MongoDB.Driver я использую следующий:

        var writeModels = new List<WriteModel<T>>();
        foreach (var entity in list)
        {
            var id = entity.Id;
            if (id == null)
            {
                writeModels.Add(new InsertOneModel<T>(entity));
            }
            else
            {
                var filter = new ExpressionFilterDefinition<T>(x => x.Id == id);
                var replaceModel = new ReplaceOneModel<T>(filter, entity);
                writeModels.Add(replaceModel);
            }
        }
        await getCollection().BulkWriteAsync(writeModels);