我正在使用C#3.2驱动程序并尝试插入或更新文档,并且(可能)添加一些新字段。我的代码如下所示:
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字段。我正在根据表单发布保存数据,因此我事先并不知道要发布哪些字段。有没有办法完成上述任务?
答案 0 :(得分:1)
这比你想象的容易:在Mongo中,如果不存在属性,则会创建。
AddToSet
不是设置简单值,而是将项添加到存储在给定属性名称中的数组,并实现 set 语义。也就是说,如果您使用AddToSet
添加商品,则会创建一系列唯一商品(taken from Mongo docs):
$ addToSet运算符向数组添加值,除非值为 已存在,在这种情况下,$ addToSet对该数组不执行任何操作。
请参阅以下docs for $set
:
如果该字段不存在,$ set将添加一个新字段 指定的值,前提是新字段不违反类型 约束。如果为不存在的字段指定虚线路径, $ set将根据需要创建嵌入文档以实现 通往该领域的虚线路径。