Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用官方c#驱动程序在MongoDB中使用update.Set更新多个字段?_C#_.net_Mongodb_Mongodb .net Driver - Fatal编程技术网

如何使用官方c#驱动程序在MongoDB中使用update.Set更新多个字段?

如何使用官方c#驱动程序在MongoDB中使用update.Set更新多个字段?,c#,.net,mongodb,mongodb-.net-driver,C#,.net,Mongodb,Mongodb .net Driver,以下代码将允许我更新电子邮件,其中FirstName=“john”和LastName=“Doe”。如何在不使用Save()方法的情况下同时更新电子邮件和电话 MongoDB.Driver.MongoServer\u server=MongoDB.Driver.MongoServer.Create(“mongodb://localhost"); MongoDB.Driver.MongoDatabase_dataBase=_server.GetDatabase(“测试”); MongoDB.Driv

以下代码将允许我更新电子邮件,其中FirstName=“john”和LastName=“Doe”。如何在不使用Save()方法的情况下同时更新电子邮件和电话

MongoDB.Driver.MongoServer\u server=MongoDB.Driver.MongoServer.Create(“mongodb://localhost");
MongoDB.Driver.MongoDatabase_dataBase=_server.GetDatabase(“测试”);
MongoDB.Driver.MongoCollection_person=_dataBase.GetCollection(“person”);
//创建新人并将其插入收藏
ObjectId newId=ObjectId.GenerateNewId();
Person newPerson=newPerson();
newPerson.Id=newId.ToString();
newPerson.FirstName=“约翰”;
newPerson.LastName=“Doe”;
newPerson.Email=“约翰。doe@gmail.com";
newPerson.Phone=“8005551222”;
_人员。插入(新人员);
//更新名为john和姓为doe的所有记录的电话和电子邮件
MongoDB.Driver.Builders.QueryComplete myQuery=MongoDB.Driver.Builders.Query.And(MongoDB.Driver.Builders.Query.EQ(“FirstName”、“John”)、MongoDB.Driver.Builders.Query.EQ(“LastName”、“Doe”);
MongoDB.Driver.Builders.UpdateBuilder update=MongoDB.Driver.Builders.update.Set(“电子邮件”)jdoe@gmail.com");
_person.Update(myQuery,Update);
非常简单;),只需将另一个集合或其他操作添加到更新中:

 var update = Update.Set("Email", "jdoe@gmail.com")
                    .Set("Phone", "4455512");

您还可以使用泛型和类型安全:

var update=update。
设置(p=>p.电子邮件,“jdoe@gmail.com").
设置(p=>p.Phone,“44555512”);
var\u personobj=\u person
{
Id=10,//对象Id
电子邮件=”jdoe@gmail.com",
电话号码=123456,
};
var replacement=Update.Replace(_personobj);
收集.更新(myquery,替换);

如果要再更新一个文档字段,请选择多个标志

例如mongodb 2.0或3.0v:


对于条件更新,您可以使用

        var updList = new List<UpdateDefinition<MongoLogEntry>>();
        var collection = db.GetCollection<MongoLogEntry>(HistoryLogCollectionName);

        var upd = Builders<MongoLogEntry>.Update.Set(r => r.Status, status)
            .Set(r => r.DateModified, DateTime.Now);
        updList.Add(upd);

        if (errorDescription != null)
            updList.Add(Builders<MongoLogEntry>.Update.Set(r => r.ErrorDescription, errorDescription));

        var finalUpd = Builders<MongoLogEntry>.Update.Combine(updList);

        collection.UpdateOne(r => r.CadNum == cadNum, finalUpd, new UpdateOptions { IsUpsert = true });
var updList=new List();
var collection=db.GetCollection(HistoryLogCollectionName);
var upd=Builders.Update.Set(r=>r.Status,Status)
.Set(r=>r.DateModified,DateTime.Now);
updList.Add(upd);
if(errorDescription!=null)
Add(Builders.Update.Set(r=>r.ErrorDescription,ErrorDescription));
var finalUpd=Builders.Update.Combine(updList);
collection.UpdateOne(r=>r.CadNum==CadNum,finalUpd,newupdateOptions{isupert=true});

或者只是弹出记录,然后修改并替换它。

我想更新多个N个字段,下面是我实现它的方法

我使用了
Builders.Update.Combine

// Get the id for which data should be updated
var filter = Builders<BsonDocument>.Filter.Eq("_id", ObjectId.Parse(_id));

// Add Data which we wants to update to the List
var updateDefination = new List<UpdateDefinition<BsonDocument>>();
foreach (var dataField in metaData.Fields)
{
    updateDefination.Add(Builders<BsonDocument>.Update.Set(dataField.Name, dataField.Value));
}
var combinedUpdate = Builders<BsonDocument>.Update.Combine(updateDefination);
await GetCollectionForClient().UpdateOneAsync(filter, combinedUpdate);
//获取应更新数据的id
var filter=Builders.filter.Eq(“_id”,ObjectId.Parse(_id));
//将我们要更新的数据添加到列表中
var updateDefination=新列表();
foreach(metaData.Fields中的var数据字段)
{
Add(Builders.Update.Set(dataField.Name,dataField.Value));
}
var combinedUpdate=Builders.Update.Combine(updateDefination);
等待GetCollectionForClient();

哇,我从没想过,除了那一个,我几乎什么都试过了!哈哈,谢谢!
var _personobj = _person
{
    Id = 10, // Object ID
    Email="jdoe@gmail.com",
    Phone=123456,

};
var replacement = Update<_person>.Replace(_personobj);
collection.Update(myquery, replacement);
yourCollection.Update(_filter
                      , _update
                      , new MongoUpdateOptions() { Flags = UpdateFlags.Multi })  
        var updList = new List<UpdateDefinition<MongoLogEntry>>();
        var collection = db.GetCollection<MongoLogEntry>(HistoryLogCollectionName);

        var upd = Builders<MongoLogEntry>.Update.Set(r => r.Status, status)
            .Set(r => r.DateModified, DateTime.Now);
        updList.Add(upd);

        if (errorDescription != null)
            updList.Add(Builders<MongoLogEntry>.Update.Set(r => r.ErrorDescription, errorDescription));

        var finalUpd = Builders<MongoLogEntry>.Update.Combine(updList);

        collection.UpdateOne(r => r.CadNum == cadNum, finalUpd, new UpdateOptions { IsUpsert = true });
// Get the id for which data should be updated
var filter = Builders<BsonDocument>.Filter.Eq("_id", ObjectId.Parse(_id));

// Add Data which we wants to update to the List
var updateDefination = new List<UpdateDefinition<BsonDocument>>();
foreach (var dataField in metaData.Fields)
{
    updateDefination.Add(Builders<BsonDocument>.Update.Set(dataField.Name, dataField.Value));
}
var combinedUpdate = Builders<BsonDocument>.Update.Combine(updateDefination);
await GetCollectionForClient().UpdateOneAsync(filter, combinedUpdate);