2012-03-29 17 views
5

Al usar MongoDB, tengo problemas para agregar elemento en una matriz cuando la matriz es nula. AddToSet funciona como se esperaba si agrego el elemento desde la consola. Estoy usando el controlador oficial C# de 10gen.Actualizar con AddToSet sin actualizar el valor nulo con MongoDB 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 

¿Este comportamiento es esperado? Si es así, ¿hay una forma más general de agregar elementos a una matriz?

Respuesta

10

Hice algunas excavaciones, according to some other comments - como usted dice, si el elemento no existe, funciona, pero si es nulo, no funciona. Aparentemente esto es por diseño.

Una sugerencia fue agregar el atributo BsonIgnoreIfNull a las matrices, lo que significa que su AddToSet funcionará.

+0

El uso de BsonIgnoreIfNull para listas resuelve la desigualdad de impedancia entre las definiciones de clase C# y MongoDB. ¡Gracias! – HatAndBeard

+1

Solo para aclararle a alguien más que vea esta respuesta, tendrá que limpiar sus datos existentes para que esto funcione. En otras palabras, si ya tiene un documento con una propiedad nula, deberá eliminar la propiedad o el documento. _Entonces_ esto funcionará la próxima vez que use AddToSet. Había agregado el atributo, pero todavía no funcionaba porque los datos ya se habían guardado con el valor nulo. – adam0101

Cuestiones relacionadas