2011-12-02 69 views
13

我不能插入找出一個子陣列...如何更新用於向陣列添加新項目的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); 

回答

14

使用$push運算符完成插入數組。

作爲便箋,您不需要使用QueryDocumentUpdateDocument。有一個更容易幫助語法:

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

注意PushWrapped<T>允許推送文件,而Push只接受這樣的類型,可以通過在MongoDB中一個簡單的現場表示。

+0

感謝。但對於Update.PushWrapped我應該引用什麼... Intellicense看不到它... – Serdar

+2

我認爲它現在是...新的UpdateBuilder()。PushWrapped在新版本 – Serdar

9

語法新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);