用AddToSet更新不用MongoDB C#更新空值

时间:2012-03-29 01:00:40

标签: c# mongodb mongodb-.net-driver

使用MongoDB,当数组为null时,我无法在数组中添加en元素。如果我从控制台添加项目,AddToSet按预期工作。我正在使用10gen的官方C#驱动程序。

var query = Query.EQ("_id", objectId);          
var itemDoc = item.ToBsonDocument();

//items is an array but currently null
var update = MongoDB.Driver.Builders.Update.AddToSet("items", itemDoc); // YUNoWork?

//somefield doesn't exist
var workingUpdate = MongoDB.Driver.Builders.Update.AddToSet("somefield", itemDoc); //works fine

var collection = DataBase.GetCollection<MyObject>(CollectionName);

collection.Update(query, update); // doesn't work
collection.Update(query, workingUpdate); // works

这是预期的行为吗?如果是这样,是否有更通用的方法将项添加到数组?

2 个答案:

答案 0 :(得分:10)

进行了一些挖掘,according to some other comments - 就像你说的那样,如果元素不存在,它可以工作,但如果它是空的 - 它不起作用。显然这是设计的。

一个建议是将BsonIgnoreIfNull属性添加到数组中,这意味着您的AddToSet将会起作用。

答案 1 :(得分:0)

放置一个空数组,而不是空值。