MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Tài liệu sao chép sâu với các liên kết được nhúng

Bạn không cần gọi .clone trên này, bạn có thể sử dụng dữ liệu thô từ các thuộc tính attributes . Ví dụ:phương thức / ví dụ dưới đây sẽ cung cấp các id mới trong toàn bộ tài liệu nếu nó tìm thấy một.

def reset_ids(attributes)
    attributes.each do |key, value|
        if key == "_id" and value.is_a?(BSON::ObjectId)
            attributes[key] = BSON::ObjectId.new
        elsif value.is_a?(Hash) or value.is_a?(Array)
            attributes[key] = reset_ids(value)
        end        
    end
    attributes
end


original = Car.find(old_id)
car_copy = Car.new(reset_ids(original.attributes))

Và bây giờ bạn có một bản sao của Xe hơi. Điều này không hiệu quả mặc dù nó phải trải qua toàn bộ băm cho bản ghi để tìm ra liệu có bất kỳ tài liệu nhúng nào trong một tài liệu được nhúng hay không. Tốt hơn hết bạn nên tự mình đặt lại cấu trúc nếu bạn biết nó sẽ như thế nào, chẳng hạn như nếu bạn có một bộ phận nào đó được nhúng vào ô tô, thì bạn chỉ cần thực hiện:

original = Car.find(old_id)
car_copy = Car.new(original.attributes)
car_copy._id = BSON::ObjectId.new
car_copy.parts.each {|p| p._id = BSON::ObjectId.new}

Điều này hiệu quả hơn rất nhiều so với việc chỉ thiết lập lại chung chung.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. $ unset trên nhiều trường trong mongodb

  2. MongoDB Không thể tìm thấy mục nhập bằng cách xác định ts.t (ts là loại Dấu thời gian)

  3. Cách dễ nhất để sao chép / sao chép một phiên bản tài liệu mongoose?

  4. Đã nâng cấp mongo lên 2.6 bằng cách sử dụng home-brew và hiện không thể kết nối

  5. Các vấn đề về hiệu suất thu thập có giới hạn