正在向MongoDB添加批升级。
看起来MonogoDB不支持批量升级。这是正确的吗正在向MongoDB添加批升级。,mongodb,Mongodb,看起来MonogoDB不支持批量升级。这是正确的吗 如果没有,您将如何使用最有效的现有API添加batch upsert?批量upsert对mongo db有意义吗?有一个名为mongoimport的实用程序,它有一个upsert标志。差不多 mongoimport -c myitems -d mydb --upsert items.json 这是否可能实现您想要的目标 默认情况下是基于_id进行upsert,但您可以使用此处记录的--upsertFields标志来更改这一点 如果升级到Mon
如果没有,您将如何使用最有效的现有API添加batch upsert?批量upsert对mongo db有意义吗?有一个名为mongoimport的实用程序,它有一个upsert标志。差不多
mongoimport -c myitems -d mydb --upsert items.json
这是否可能实现您想要的目标
默认情况下是基于_id进行upsert,但您可以使用此处记录的--upsertFields标志来更改这一点
如果升级到MongoDB 2.6,您可以利用:
Bulk.find().upsert().update();
Bulk.find().upsert().updateOne();
Bulk.find().upsert().replaceOne();
对于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);
var writeModels=new List();
foreach(列表中的var实体)
{
var id=entity.id;
if(id==null)
{
Add(新的InsertOneModel(实体));
}
其他的
{
var filter=newexpressionfilterdefinition(x=>x.Id==Id);
var replaceModel=新的ReplaceOneModel(过滤器,实体);
添加(替换模型);
}
}
等待getCollection().BulkWriteAsync(writeModels);
您所说的“批量升级”到底是什么意思?在更新(替换)已存在的对象时添加尚不存在的文档?是,但作为一批而不是逐个添加!与save方法类似,save方法对一个文档进行upsert,但可以对一批文档进行批量upsert此线程是否为您提供帮助:尚未resovled@MSpreij这个问题已经提出一年了,OP(iCode)似乎已经满足于“保存”方法对他们的工作流程最有意义。您想详细说明一下您的用例吗?
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);