2013-02-18 52 views
4

如何编写此更新查询以更新c#中的mongo记录。如何编写更新查询来更新mongodb中的多个字段?

db.collection.update({ "S_Id" : 110 },{ "Name" : "Name1","Batch" : "43","Date":"9/2/2011", "Status" : 0 }); 

我'尝试这样

IMongoUpdate update = new UpdateDocument(); 
if (Named != null) { update = Update.Set("Name", "Name1"); } 
if (Date != null) { update = Update.Set("Date", "18/02/2013"); } 
if (Batch != null) { update = Update.Set("Batch",43); } 
coll.Update(query, update); 

是我'做正确的或我必须做什么样的方式,请让我继续的正确方法。

+0

谢谢@Soner Gonul,下次我会纠正我的错误。 – siva 2013-02-18 14:16:53

回答

5

在你的例子中,你可能会覆盖每个选项的值update,所以只会发送一个更新命令给col1.Update()

你将要使用的方法Update.Combine,隐约的东西是这样的:(未经测试,并且有点难看......)

var updateValues = new List<UpdateBuilder>(); 
    if (Named != null) { updateValues.Add(Update.Set("Name", "Name1")); } 
    if (Date != null) { updateValues.Add(Update.Set("Date", "18/02/2013")); } 
    if (Batch != null) { updateValues.Add(Update.Set("Batch", 43)); } 
    IMongoUpdate update = Update.Combine(updateValues); 
    coll.Update(query, update); 
+1

嗨Baldric,谢谢你的答案,它工作正常。 – siva 2013-02-18 14:14:06

1

它现在已经修改为:

FilterDefinitionBuilder<BsonDocument> builder = Builders<BsonDocument>.Filter; 
    FilterDefinition<BsonDocument> filter; 

    filter = builder.Eq("_id",BsonObjectId.Create(objectid)); 

//或要搜索的字段

var update = Builders<BsonDocument>.Update 
.Set("key1", "value1") 
.Set("key2", "value2") 
.CurrentDate("lastModified"); 

    Collection.UpdateOne(filter, update);