2012-09-11 22 views
5

Tôi có tài liệu sau:Cập nhật và/hoặc thêm thuộc tính phần tử mảng bằng cách sử dụng req.body qua Mongoose?

{ 
    "_id" : ObjectId("503b83dfad79cc8d26000004"), 
    "pdfs" : [ 
     { 
      "title" : "Test document", 
      "pdf_id" : ObjectId("504f6793ce351a595d000004"), 
      "created_at" : ISODate("2012-09-11T16:32:19.276Z") 
     }, 
     { 
      "title" : "Some other doc", 
      "pdf_id" : ObjectId("502bf124b4642341230003f0"), 
      "created_at" : ISODate("2012-09-11T11:34:19.276Z") 
     } 
    ] 
} 

Bây giờ trong một hình thức đến qua req.body, tôi có 2 lĩnh vực: titledescription.

Tôi muốn cập nhật title và chèn description cho pdf_id được chỉ định, làm cách nào để thực hiện điều đó?

Vì vậy, cuối cùng, tài liệu của tôi bây giờ sẽ trông giống như:

{ 
    "_id" : ObjectId("503b83dfad79cc8d26000004"), 
    "pdfs" : [ 
     { 
      "title" : "This is an UPDATED title", 
      "description" : "It has an ALL NEW description", 
      "pdf_id" : ObjectId("504f6793ce351a595d000004"), 
      "created_at" : ISODate("2012-09-11T16:32:19.276Z") 
     }, 
     { 
      "title" : "Some other doc", 
      "pdf_id" : ObjectId("502bf124b4642341230003f0"), 
      "created_at" : ISODate("2012-09-11T11:34:19.276Z") 
     } 
    ] 
} 

Chỉ cần được rõ ràng, tôi thực sự chỉ là tìm kiếm các cú pháp Mongoose update.

Trả lời

9

Bạn có thể sử dụng $ positional operator để đề cập đến các yếu tố pdfs mảng phù hợp trong bạn $set:

Model.update(
    { 'pdfs.pdf_id': pdf_id }, 
    { $set: { 
     'pdfs.$.title': title, 
     'pdfs.$.description': description 
    }}, function (err, numAffected) { ... } 
); 
+1

Trong hộp thoại '$ set', là có cách nào để gán các thuộc tính tự động? Người dùng có thể không cung cấp một số và tôi không muốn chỉ định chúng một cách rõ ràng. – k00k

+0

Chắc chắn, bạn chỉ cần xây dựng đối tượng '$ set' đó lập trình và sau đó truyền đối tượng đó làm tham số thứ hai cho cuộc gọi' update'. Sắp xếp giống như trong câu hỏi khác này: http://stackoverflow.com/questions/12184626/nodejs-mongo-insert-into-subdocument-dynamic-fieldname/12185214#12185214 – JohnnyHK

+0

Tuyệt vời, cảm ơn. Cái gì đó vấp tôi lên, có thể giúp đỡ người khác: Nó sẽ không cập nhật cho tôi khi tôi chỉ có mảng của tôi thiết lập để trộn lẫn '[]'. Tôi đã phải xây dựng lược đồ cho mảng và đảm bảo rằng _id của phần tử mảng mà bạn đang cố gắng cập nhật được chỉ rõ như là một 'type: Schema.Types.ObjectId' trong lược đồ của bạn. – k00k

Các vấn đề liên quan