2016-02-22 74 views
0

我正在使用C#3.2驅動程序並嘗試插入或更新文檔,並且還可能(添加)一些新字段。我的代碼如下所示:MongoDB更新文檔並添加新屬性

var collection = database.GetCollection<BsonDocument>("User"); 
var filter = Builders<BsonDocument>.Filter.Eq("UserID", "mkemp"); 

var update = Builders<BsonDocument>.Update 
     .Set("FirstName", "Mike") 
     .Set("LastName", "Kemp"); 


update.AddToSet("Age", "57"); 

var result = collection.UpdateOne(filter, update , new UpdateOptions() { IsUpsert = true }); 

FirstName和LastName會被創建,但Age字段不會被創建或更新。我基於表單文章保存數據,所以我不知道哪些字段將被髮布。有什麼辦法可以完成上述任務嗎?

回答

1

這比您想象的要容易:在Mongo中,如果某個屬性不存在,則會創建它。

AddToSet不是設置簡單值,而是將項添加到存儲在給定屬性名稱中的數組,它實現了語義。也就是說,如果你使用AddToSet添加項目,將創建的獨特元素的數組(taken from Mongo docs):

的$ addToSet運營商增加值到一個數組除非值 已經存在,在這種case $ addToSet對該數組不做任何事情。

請參閱以下docs for $set:

如果該字段不存在,$組將增加一個新的領域與 指定的值,前提是新的領域並不違反類型 約束。如果爲不存在的字段指定虛線路徑,則 $ set將根據需要創建嵌入式文檔,以完成該字段的虛線路徑 。

+0

那麼我在尋找什麼方法來完成我想要做的事? – MillinMo

+0

@MillinMo仔細檢查我的答案是:你需要使用'Set'太:d –

+0

我改變了代碼 VAR更新=建設者 .Update .SET( 「名字」, 「邁克」) .SET (「LastName」,「Kemp12121212」); update.Set(「Age」,「27」); 但它仍然不會將該字段添加到文檔中 – MillinMo