sql >> Database teknologi >  >> NoSQL >> MongoDB

Dybt klondokument med indlejrede associationer

Du behøver ikke at kalde .clone på dette, du kan bruge rådata fra attributes . For eksempel vil nedenstående metode/eksempel give nye id'er gennem hele dokumentet, hvis det finder et.

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

Og du har nu en kopi af Bil. Dette er dog ineffektivt, da det skal gennemgå hele hashen for at posten kan finde ud af, om der er indlejrede dokumenter i et indlejret dokument. Du ville være bedre stillet at nulstille strukturen selv, hvis du ved, hvordan den vil være, for eksempel hvis du har en del indlejret i bilen, så kan du bare gøre:

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}

Hvilket er meget mere effektivt end blot at udføre en generisk nulstilling.



  1. Start MongoDB inde fra en Grunt-opgave

  2. Skub inde for hver med forespørgsel fungerer ikke korrekt

  3. Mongoose:hvad sker der med _doc?

  4. hvordan finder man et særskilt felt af en model på en og tilstand hos mangust?