2010-09-12 11 views
5

Tôi có mô hình dự án chỉ với trường tên và trong đó cũng là quan hệ được nhúng với line_items. Dự án lớp bao gồm mongoid :: tài liệu lĩnh vực: tên embeds_many: line_items cuốixóa tài liệu được nhúng trong mongoid

class LineItem 
    include mongoid::document 
    field :title 
    embedded_in :project, :inverse_of => :line_items 
    end 

Tôi cho rằng đây là chi tiết của câu hỏi lái xe Mongo: nếu tôi có một tài liệu như vậy

db.project.find()[0] 
     { 
     _id : 123, 
     name : "housework", 
     line_items:[ 
     { title : "clean fridge", _id : 601}, 
     { title : "clean tub", _id : 602}, 
     { title : "clean oven", _id : 603} 
     ] 
     } 
  • 1) Làm cách nào để cập nhật nói mục hàng có id 601 trong bảng điều khiển mongo?
  • 2) làm cách nào để xóa?

Cảm ơn!

Trả lời

1

1/Cập nhật:

pro = Project.first 
line_item = pro.line_items.find(601) 
line_item.title = 'new title' 
line_item.save 

2/Xóa:

pro = Project.first 
line_item = pro.line_items.find(601) 
pro.line_item_ids.delete(601) 
pro.save 
+0

Cảm ơn Shingara, nhưng đây là từ Rails Console, không phải từ bảng điều khiển MongoDB. Bạn có biết cú pháp của mongodb là gì không? –

+0

để xóa là dòng thứ ba đúng không? trong hầu hết các trường hợp, bạn sẽ không biết ID của mục được nhúng, vì vậy bạn có thể làm một: line_item = pro.line_items.where (: title => "xxx"). đầu tiên và sau đó là pro.line_item_ids.delete (line_item.id) – Nader

0

Hãy thử ...

Cập nhật:

db.project.update({ line_items._id : 601 }, { $set : { line_items.title : "new title" } }) 

Xóa:

db.project.update({ $pull : { line_items._id : 601 } }) 

Xin lỗi về điều đó, hãy thử ngay bây giờ?

+0

Cảm ơn Luckytaxi. Bản cập nhật hoạt động, nhưng việc loại bỏ thực sự loại bỏ (các) dự án có chứa một mục hàng có id 601 –

15

hiện Mongoid (2.0.0) cho phép:

@category = @list.categories.find(params[:id]) 
@category.delete 

Và kết quả truy vấn cơ sở dữ liệu/cập nhật trông giống như:.

MongoDB thử nghiệm [ 'danh sách'] cập nhật ({ "_ id "=> BSON :: ObjectId ('4d9522315569b11918000019')}, {" $ pull "=> {" danh mục "=> {" _ id "=> BSON :: ObjectId ('4d9523e05569b1191800001f')}}})

Ngoài ra, hãy xem ví dụ cuối cùng trên http://mongoid.org/docs/persistence/

Lưu ý, tôi đã thử các biến thể này có thể đã hoạt động với ActiveRecord (@ list.categories.delete (xx)) và những thứ đó dường như không có hiệu lực.

0

Thử:

db.project.update ({}, {$ set: {line_items: []}});

để xóa tài liệu được nhúng, điều này sẽ chỉ đặt lại dữ liệu bên trong để trống nhưng vẫn sẽ giữ lại đối tượng trống trong db mà bạn có thể lặp lại sau này.

+0

Xin chào Anand, cảm ơn bạn đã đưa ra câu trả lời. Tôi nghĩ rằng tôi đang tìm kiếm thêm chỉ xóa một bản ghi được nhúng thay vì xóa tất cả các bản ghi được nhúng trong một liên kết embeds_many. Nhưng cảm ơn anyways! –