正在向MongoDB添加批升级。

正在向MongoDB添加批升级。,mongodb,Mongodb,看起来MonogoDB不支持批量升级。这是正确的吗 如果没有,您将如何使用最有效的现有API添加batch upsert?批量upsert对mongo db有意义吗?有一个名为mongoimport的实用程序,它有一个upsert标志。差不多 mongoimport -c myitems -d mydb --upsert items.json 这是否可能实现您想要的目标 默认情况下是基于_id进行upsert,但您可以使用此处记录的--upsertFields标志来更改这一点 如果升级到Mon

看起来MonogoDB不支持批量升级。这是正确的吗


如果没有,您将如何使用最有效的现有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);