2016-02-22 84 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