2012-03-29 5 views
5

Mit MongoDB, habe ich Probleme beim Hinzufügen von en-Element zu einem Array, wenn das Array null ist. AddToSet funktioniert wie erwartet, wenn ich das Element von der Konsole hinzufüge. Ich benutze den offiziellen C# -Treiber von 10gen.Update mit AddToSet nicht Nullwert mit MongoDB aktualisieren 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 

Ist das erwartete Verhalten? Wenn ja, gibt es eine allgemeinere Möglichkeit, Elemente zu einem Array hinzuzufügen?

Antwort

10

Haben einige graben, according to some other comments - wie Sie sagen, wenn das Element nicht existiert, es funktioniert, aber wenn es Null ist - es funktioniert nicht. Anscheinend ist das mit Absicht.

Ein Vorschlag war, das Attribut BsonIgnoreIfNull zu Arrays hinzuzufügen, was bedeutet, dass Ihr AddToSet dann funktioniert.

+0

Die Verwendung von BsonIgnoreIfNull für Listen löst die Impedanzabweichung zwischen den C# -Klassendefinitionen und MongoDB auf. Vielen Dank! – HatAndBeard

+1

Nur um für jeden anderen, der diese Antwort sieht, klarzustellen, müssen Sie Ihre vorhandenen Daten bereinigen, damit dies funktioniert. Mit anderen Worten, wenn Sie bereits ein Dokument mit einer Null-Eigenschaft haben, müssen Sie die Eigenschaft oder das Dokument löschen. _Dann wird dies das nächste Mal, wenn Sie AddToSet verwenden. Ich hatte das Attribut hinzugefügt, aber es funktionierte immer noch nicht, weil die Daten bereits mit dem Nullwert gespeichert wurden. – adam0101