2011-12-02 19 views
13

no pude averiguar inserción a una serie de sub ...¿Cómo puedo actualizar el documento mongodb para agregar un nuevo elemento a la matriz?

  • _id
  • MiMatriz
  • --Artículo
  • ---- ArrayItemId
  • ---- Nombre

quiero insertar elementos para myarray ...

¿Cómo debería ser mi documento de actualización?

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); 

Respuesta

14

Inserción de una matriz se hace usando el operador $push.

Como nota al margen, no es necesario utilizar QueryDocument y UpdateDocument. Hay una sintaxis ayudante mucho más fácil:

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

Tenga en cuenta que PushWrapped<T> permite empujar documentos, mientras que Push sólo acepta estos tipos que pueden ser representados por un campo simple en MongoDB.

+0

gracias. Pero para Update.PushWrapped, ¿a qué debo hacer referencia ... Intellicense no lo está viendo ... – Serdar

+2

Creo que es ahora ... el nuevo UpdateBuilder(). PushWrapped en la nueva versión – Serdar

9

Sintaxis de nuevo adaptador # asíncrono 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); 
Cuestiones relacionadas