Добавление Batch Upsert в MongoDB. - PullRequest
13 голосов
/ 14 января 2012

Похоже, MonogoDB не поддерживает пакетную загрузку. Это правильно?

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

Ответы [ 3 ]

2 голосов
/ 22 мая 2014

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

Bulk.find(<query>).upsert().update(<update>);
Bulk.find(<query>).upsert().updateOne(<update>);
Bulk.find(<query>).upsert().replaceOne(<replacement>);    
1 голос
/ 05 мая 2015

Для C # MongoDB. Драйвер я использую следующий:

        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);
1 голос
/ 28 января 2013

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

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

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

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

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

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