2011-12-02 38 views
13

tôi không thể tìm ra chèn vào một mảng phụ ...Làm cách nào để cập nhật tài liệu mongodb để thêm mục mới vào mảng?

  • _id
  • myArray
  • --Item
  • ---- ArrayItemId
  • ---- Tên

Tôi muốn chèn các mục vào MyArray ...

Tài liệu cập nhật của tôi nên như thế nào?

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

Trả lời

14

Chèn vào một mảng được thực hiện bằng toán tử $push.

Lưu ý phụ, bạn không cần sử dụng QueryDocumentUpdateDocument. Có một cú pháp helper dễ dàng hơn nhiều:

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

Lưu ý rằng PushWrapped<T> phép để đẩy tài liệu, trong khi Push chỉ chấp nhận loại như vậy có thể được đại diện bởi một lĩnh vực đơn giản trong MongoDB.

+0

nhờ. Nhưng đối với Update.PushWrapped những gì tôi nên tham khảo ... Intellicense không nhìn thấy nó ... – Serdar

+2

Tôi nghĩ rằng nó bây giờ là ... UpdateBuilder mới(). PushWrapped trong phiên bản mới – Serdar

9

Cú pháp cho mới MongoDB c bộ chuyển đổi # async:

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); 
Các vấn đề liên quan