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

C# 使用AddToSet更新不使用MongoDB C更新空值#,c#,mongodb,mongodb-.net-driver,C#,Mongodb,Mongodb .net Driver,使用MongoDB时,当数组为空时,我在向数组添加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.Updat

使用MongoDB时,当数组为空时,我在向数组添加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
var query=query.EQ(“\u id”,objectId);
var itemDoc=item.ToBsonDocument();
//items是数组,但当前为空
var update=MongoDB.Driver.Builders.update.AddToSet(“items”,itemDoc);//尤诺沃克?
//somefield不存在
var workingUpdate=MongoDB.Driver.Builders.Update.AddToSet(“somefield”,itemDoc)//很好
var collection=DataBase.GetCollection(CollectionName);
collection.Update(查询,更新);//不起作用
collection.Update(查询、工作更新);//作品
这是预期的行为吗?如果是这样,有没有更通用的方法将项目添加到数组中?

做了一些挖掘-就像你说的,如果元素不存在,它会工作,但是如果元素为null,它就不工作。显然这是故意的


一个建议是将该属性添加到数组中,这将意味着您的AddToSet将工作

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

使用BsonIgnoreIfNull for lists解决了C#类定义和MongoDB之间的阻抗不匹配问题。谢谢为了向其他看到这个答案的人澄清,您必须清理现有数据,才能使其正常工作。换句话说,如果您已经有一个具有null属性的文档,则必须删除该属性或文档。那么下次使用AddToSet时,这将起作用。我已经添加了该属性,但它仍然不起作用,因为数据已经用null保存。