Подтвердить что ты не робот

Как обновить документ mongodb для добавления нового элемента в массив?

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

  • _id
  • MyArray
  • - элемент
  • ---- 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);
4b9b3361

Ответ 1

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

В качестве побочного примечания вам не нужно использовать QueryDocument и UpdateDocument. Там гораздо проще вспомогательный синтаксис:

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

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

Ответ 2

Синтаксис для нового асинхронного адаптера MongoDB С#:

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