2014-10-27 17 views
8

Czy można powiązać dokumenty z różnych kolekcji w ArangoDB w wersji OrientDB?Dokumenty linków ArangoDB

W OrientDB można utworzyć pole typu LINK i określić powiązany typ. To tworzy relację między obydwoma dokumentami.

Czy muszę korzystać z kolekcji krawędzi w ArangoDB?

Próbuję zdefiniować kolekcję główną i kolekcję dodatkową z dodatkowymi informacjami uzupełniającymi główną. Nie chcę mieć wszystkich danych w głównej kolekcji, ponieważ jest ona dzielona między innymi jednostkami.

Z góry dziękuję.

Odpowiedz

12

Są to w rzeczywistości dwie opcje:

  1. Korzystanie dołącza

    Można zdefiniować atrybut na głównym dokumentem zawierającym informacje, które identyfikują się z sub-dokument (na przykład przez jej _key), a następnie użyć AQL do przyłączenia się do dwóch dokumentów w zapytaniu:

    FOR x IN maindocuments FILTER x.whatever < 42 FOR y in secondarydocuments FILTER x.sub = y._key RETURN MERGE(x,y)

  2. Używanie krawędzi

    Możesz zdefiniować zbiór krawędzi zawierający wszystkie "relacje" między twoimi dokumentami. Dokumenty krawędzi mogą również opcjonalnie dodatkowe informacje na samych krawędziach.

    FOR x in maindocuments LET n = NEIGHBORS("maindocuments", "edgecollection", x._id, "any"); RETURN MERGE(x, n[0].vertex);

Jednak nie ma czegoś takiego jak klucz obcy w ArangoDB. Możesz odwoływać się do nieistniejących dokumentów na krawędziach lub usunąć pod-dokument bez informowania głównego dokumentu.

Zaletą drugiego podejścia jest to, że można używać dowolnej liczby krawędzi między tymi dokumentami, a nawet decydować o 0, 1 lub więcej podczas uruchamiania aplikacji bez żadnych modyfikacji. Przy pierwszym podejściu musisz zdecydować na początku, nadając atrybutowi pojedynczą wartość lub listę wartości.

+1

Czy są jakieś korzyści z pierwszego podejścia? Czy to np. łatwiej używać w zapytaniach, innej wydajności? – specimen