2011-12-02 22 views
13

Ben ... bir alt diziye insert çözemedimDiziye yeni bir öğe eklemek için mongodb belgesini nasıl güncelleyebilirim?

  • BenimDizi
  • --Item
  • ---- ArrayItemId
  • ---- Adı
  • _ID

    Ben myarray öğeleri eklemek istediğiniz

...

Güncelleme dokümanım nasıl olmalı? Bir dizideki takma

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

cevap

14

$push operatörü ile yapılır.

Bir yan not olarak, QueryDocument ve UpdateDocument'u kullanmanız gerekmez. çok daha kolay bir yardımcı sözdizimi vardır: PushWrapped<T> belgeleri itmek izin verdiğini

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

Not Push MongoDB basit alanı tarafından temsil edilebilir ancak böyle türlerini kabul ederken. Yeni MongoDB C# zaman uyumsuz adaptörü için

+0

teşekkürler. Ama Update.PushWrapped için ne başvurmalıyım ... Intellicense bunu görmüyor ... – Serdar

+2

Şimdi düşünüyorum ... yeni UpdateBuilder() .Yeni sürümde PushWrapped – Serdar

9

dizimi:

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); 
İlgili konular