它看起来像MonogoDB不支持批量upsert。它是否正确?将批量插入添加到MongoDB。
如果不是,你会如何去添加批处理upsert与现有的API是最有效的?批量upsert甚至对mongo db有意义吗?
它看起来像MonogoDB不支持批量upsert。它是否正确?将批量插入添加到MongoDB。
如果不是,你会如何去添加批处理upsert与现有的API是最有效的?批量upsert甚至对mongo db有意义吗?
有一个实用工具叫做mongoimport,它有一个upsert标志。类似于
mongoimport -c myitems -d mydb --upsert items.json
难道这可能实现你在找什么?
默认是UPSERT基于_id但你可以改变,使用--upsertFields标志记录在这里
http://docs.mongodb.org/manual/reference/mongoimport/#cmdoption-mongoimport--upsertFields
如果升级到MongoDB的2.6你可以采取new Bulk operations的优势:
Bulk.find(<query>).upsert().update(<update>);
Bulk.find(<query>).upsert().updateOne(<update>);
Bulk.find(<query>).upsert().replaceOne(<replacement>);
对于C#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);
“批量upsert”是什么意思?在更新(替换)已存在的对象时添加尚不存在的文档? – mnemosyn 2012-01-14 13:31:20
是的,但作为一个批次,而不是一个一个!类似于保存方法,它可以插入一个文档,但它可以批量插入一批文档 – iCode 2012-01-15 00:17:32
此线程是否为您提供帮助: http://stackoverflow.com/questions/5143756/upsert-multiple -records-with-mongodb – Bill 2012-01-19 18:19:02