使用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
这是预期的行为吗?如果是这样,是否有更通用的方法将项添加到数组?
答案 0 :(得分:10)
进行了一些挖掘,according to some other comments - 就像你说的那样,如果元素不存在,它可以工作,但如果它是空的 - 它不起作用。显然这是设计的。
一个建议是将BsonIgnoreIfNull属性添加到数组中,这意味着您的AddToSet将会起作用。
答案 1 :(得分:0)
放置一个空数组,而不是空值。