2012-03-29 13 views
5

Użycie MongoDB, mam problem z dodaniem elementu en do tablicy, gdy tablica ma wartość null. AddToSet działa zgodnie z oczekiwaniami, jeśli dodaję element z konsoli. Używam oficjalnego sterownika C# z 10gen.Aktualizacja z AddToSet nie aktualizowanie wartości null z 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 

Czy to oczekiwane zachowanie? Jeśli tak, czy istnieje bardziej ogólny sposób dodawania elementów do tablicy?

Odpowiedz

10

Czy niektóre kopanie, according to some other comments - jak mówisz, jeśli element nie istnieje, działa, ale jeśli jest zerowy - to nie działa. Podobno jest to zgodne z projektem.

Jedną z sugestii było dodanie atrybutu BsonIgnoreIfNull do tablic, co będzie oznaczać, że Twój AddToSet będzie działał.

+0

Użycie BsonIgnoreIfNull dla list rozwiązuje niedopasowanie impedancji między definicjami klasy C# i MongoDB. Dzięki! – HatAndBeard

+1

Aby wyjaśnić sytuację komukolwiek, kto widzi tę odpowiedź, musisz wyczyścić istniejące dane, aby działało. Innymi słowy, jeśli masz już dokument z właściwością null, musisz usunąć właściwość lub dokument. _Then_ to zadziała przy następnym użyciu AddToSet. Dodałem atrybut, ale nadal nie działa, ponieważ dane zostały już zapisane z wartością null. – adam0101