它看起來像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