2013-02-18 99 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);