2011-12-02 12 views
13

io non riuscivo a capire inserto a una matrice sub ...Come posso aggiornare il documento mongodb per aggiungere un nuovo elemento all'array?

  • _id
  • MyArray
  • --Articolo
  • ---- ArrayItemId
  • ---- Nome

voglio inserire elementi da myarray ...

Come dovrebbe essere il mio documento di aggiornamento?

MyCollection.Update( 
new QueryDocument { { "_id", MyObject.Id } }, 
new UpdateDocument { { "$set", new BsonDocument { { "MyArray", 
     new BsonArray { new BsonDocument {{ "ArrayItemId", myArrayField.Id }}, 
         new BsonDocument {{ "Name", myArrayField.Name }} }}}}}, 
UpdateFlags.None); 

risposta

14

Inserimento in un array viene fatto utilizzando l'operatore $push.

Come nota a margine, non è necessario utilizzare QueryDocument e UpdateDocument. C'è una sintassi aiutante molto più semplice:

MyCollection.Update(Query.EQ("_id", MyObject.Id), 
        Update.PushWrapped("MyArray", myArrayField) 

Nota che PushWrapped<T> permette di spingere i documenti, mentre Push accetta solo quei tipi che possono essere rappresentati da un semplice campo in MongoDB.

+0

grazie. Ma per Update.PushWrapped, cosa dovrei fare riferimento ... Intellicense non lo vede ... – Serdar

+2

Penso che sia ora ... nuovo UpdateBuilder(). PushWrapped nella nuova versione – Serdar

9

Sintassi per nuovo adattatore # async MongoDB c:

var filter = Builders<myObject> 
      .Filter.Eq(e => e.Name, "name"); 

var update = Builders<myObject>.Update 
     .Push<String>(e => e.MyArray, myArrayField); 

await collection.FindOneAndUpdateAsync(filter, update); 
Problemi correlati