MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak modelować wiele autoreferencyjnych relacji z wieloma rodzicami?

Zamiast iterować przez drzewo (bardziej jak w rzeczywistości skierowany wykres) za każdym razem, gdy musisz pobrać wszystkie zależności dla umiejętności, możesz po prostu iterować przez implikowane zależności podczas dodawania nowej zależności do konkretnej umiejętności i zapisać je w tabeli o nazwie „Zależność”, która odwzorowuje umiejętność na zależność i na odwrót. Na przykład (relacje mogłyby być lepiej sformułowane):

class Skill
    has_many :dependers, class_name: 'Dependency', foreign_key: :dependee_id
    has_many :dependees, class_name: 'Dependency', foreign_key: :depender_id

    has_many :dependencies, through: :dependees
    has_many :depending, through: :dependers

    def add_dependency(skill)
        recurse_dependencies(skill)
    end

    def recurse_dependencies(skill)
        # perform this check to avoid circular and duplicate dependencies
        if !depender_ids.include?(skill.id) && !dependee_ids.include?(skill.id)
            dependee_ids << skill.id
        end

        skill.dependencies.each do |dependency|
            recurse_dependencies(dependency)
        end
    end
end

class Dependency
    belongs_to :dependee
    belongs_to :depender
end

Powinieneś wtedy móc robić takie rzeczy jak:

@front_end_development.dependencies
@front_end_development.depending
@front_end_development.add_dependency(@html)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak używać zmiennych w funkcji mapy MongoDB Map-reduce

  2. Wstawianie danych do zagnieżdżonej tablicy w mongodb

  3. Nie można zdestrukturyzować właściwości „user” „undefined” lub „null”

  4. Zwrócić ograniczoną liczbę rekordów określonego typu, ale nieograniczoną liczbę innych rekordów?

  5. Połącz R ze zdalną mongoDB za pomocą rmongodb