Похоже, MonogoDB не поддерживает пакетную загрузку. Это правильно?
Если нет, как бы вы добавили пакетный переход с существующим API, который является наиболее эффективным? Имеет ли смысл использовать пакетный upsert для mongo db?
Если вы обновитесь до MongoDB 2.6, вы сможете воспользоваться новыми Массовыми операциями :
Bulk.find(<query>).upsert().update(<update>); Bulk.find(<query>).upsert().updateOne(<update>); Bulk.find(<query>).upsert().replaceOne(<replacement>);
Для 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);
Существует утилита mongoimport, которая имеет флаг upsert. Что-то вроде
mongoimport -c myitems -d mydb --upsert items.json
Может ли это достичь того, что вы ищете?
По умолчанию используется upsert на основе _id, но вы можете изменить это, используя флаг --upsertFields, задокументированный здесь
http://docs.mongodb.org/manual/reference/mongoimport/#cmdoption-mongoimport--upsertFields