MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Дълбок клониран документ с вградени асоциации

Не е нужно да извиквате .clone за това, можете да използвате необработените данни от attributes . Например методът/примерът по-долу ще даде нови идентификатори в целия документ, ако намери такъв.

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

И вече имате копие на Car. Това обаче е неефективно, тъй като трябва да премине през целия хеш за записа, за да разбере дали има вградени документи във вграден документ. Би било по-добре да нулирате структурата сами, ако знаете как ще бъде, например, ако имате части, вградени в кола, тогава можете просто да направите:

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}

Което е много по-ефективно от обикновено нулиране.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Актуализирайте поддокумент, съдържащ се в масив, съдържащ се в документ на MongoDB

  2. MongoDB – Донесете свои собствени SSL сертификати

  3. junit тестови случаи с помощта на embed mongodb de.flapdoodle.embed.mongo

  4. Съхранявайте функция на сървър с Java - MongoDB

  5. Масово прехвърляне в MongoDB с помощта на mongoose