Как я могу обновить документ mongodb для добавления нового элемента в массив? - PullRequest
14 голосов
/ 02 декабря 2011

Я не могу определить вставку в подмассив ...

  • _id
  • MyArray
  • - Item
  • ---- ArrayItemId
  • ---- Имя

Я хочу вставить элементы в MyArray ...

Каким должен быть мой документ обновления?

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

Ответы [ 2 ]

16 голосов
/ 26 декабря 2015

Синтаксис для нового асинхронного адаптера 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);
14 голосов
/ 02 декабря 2011

Вставка в массив выполняется с помощью оператора $push.

Как примечание, вам не нужно использовать QueryDocument и UpdateDocument. Там намного проще синтаксис помощника:

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

Обратите внимание, что PushWrapped<T> позволяет отправлять документы, тогда как Push принимает только такие типы, которые могут быть представлены простым полем в MongoDB.

...