2012-03-29 3 views
5

Utilizzando MongoDB, ho difficoltà ad aggiungere un elemento a una matrice quando l'array è nullo. AddToSet funziona come previsto se aggiungo l'elemento dalla console. Sto usando il driver C# ufficiale da 10gen.Aggiornamento con AddToSet che non aggiorna il valore nullo 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 

È questo comportamento previsto? In tal caso, c'è un modo più generale per aggiungere elementi a un array?

risposta

10

Ha scavato, according to some other comments - come dici tu, se l'elemento non esiste, funziona, ma se è nullo non funziona. Apparentemente questo è di design.

Un suggerimento era di aggiungere l'attributo BsonIgnoreIfNull agli array, il che significa che il tuo AddToSet funzionerà.

+0

L'utilizzo di BsonIgnoreIfNull per gli elenchi risolve il disadattamento di impedenza tra le definizioni di classe C# e MongoDB. Grazie! – HatAndBeard

+1

Giusto per chiarire per chiunque altro veda questa risposta, dovrai pulire i dati esistenti affinché funzioni. In altre parole, se hai già un documento con una proprietà nulla, dovrai eliminare la proprietà o il documento. _Quindi_ questo funzionerà la prossima volta che usi AddToSet. Avevo aggiunto l'attributo, ma non funzionava ancora perché i dati erano già stati salvati con il null. – adam0101