2016-05-10 6 views
0

Ich schreibe eine Anwendung, die externe Daten in ArangoDB für die weitere Verarbeitung in der Anwendung speichert. Nehmen wir an, ich spreche über Photos in Photosets hier.Erhalte nur IDs von Knoten über die Kantensammlung

Aufgrund der Art der verwendeten APIs muss ich Photosets abrufen, bevor ich Photos laden kann. In der Photosets API-Antwort gibt es eine Liste von Photo IDs, die ich später zum Abrufen der Photo s verwenden. Also habe ich eine Kantensammlung namens photosInSets erstellt und die Kanten zwischen Photosets und Photos gespeichert, obwohl die Photos noch nicht da sind.

Später, ich brauche eine Liste aller benötigten Photo s, um sie über die API zu laden. Alle IDs sind numerisch. Im Moment verwende ich die folgende AQL-Abfrage der IDs aller Photos erforderlich holen:

FOR edge 
IN photosInSets 
RETURN DISTINCT TO_NUMBER(
    SUBSTITUTE(edge._from, "photos/", "") 
) 

aber ... dies wie eine schöne Lösung sieht nicht aus. Ich möchte (zumindest) die Zeichenfolgenoperation loswerden, um den Sammlungsnamen zu entfernen. Was ist der schöne Weg, das zu tun?

+0

Hat die Antwort Ihre Anforderungen erfüllt? Wenn nicht, was fehlt? Wenn, können Sie es als akzeptiert markieren? – dothebart

Antwort

1

Ein Weg, den Sie finden können, ist mit einem Beitritt in der photosInSets Rand Sammlung zurück zur Fotosammlung.

eine Abfrage Versuchen Sie, die wie folgt aussieht:

FOR e IN photoInSets 
LET item = (FOR v IN photos FILTER e._from == v._id RETURN v._key) 
RETURN item 

Diese die _From Referenz in photoInSets mit dem _id zurück in der photos Kollektion verbindet, zieht dann den _key von photos, die nicht den Namen der Sammlung haben als Teil davon.

Schauen Sie sich einen Fotoartikel an und Sie werden sehen, dass _id, _key und _rev als Systemattribute vorliegen. Es ist in Ordnung, den _key-Wert zu verwenden, wenn Sie eine Zeichenfolge wünschen. Es ist nicht notwendig, eine eigene eindeutige ID zu implementieren, es sei denn, es gibt einen brennenden Grund, warum Sie _key nicht angeben können.

Mit ein wenig Manipulation könnten Sie sogar ein Array von Objekten zurückgeben, die angeben, welcher photo._key ein Mitglied des photoSet ist, Sie müssen nur zwei LET-Befehle haben und beide Ergebnisse zurückgeben. Ein Blick auf das Foto, ein Blick auf das PhotoSet.

Ich bin nicht offizielle ArangoDB Unterstützung, aber ich bin interessiert, wenn sie eine andere Möglichkeit haben, dies zu tun.

+0

Das Ding ist ... wie ich geschrieben habe, sind die Fotos noch nicht da, die Fotos sind leer. Ich verwende die erwähnte Abfrage, um eine Liste von Fotos zu erhalten, die ich holen muss, damit ich der leeren Sammlung nicht beitreten kann. Trotzdem danke! –

+0

OK, Sie erstellen also Fotosätze und Fotos und fügen später Beziehungen zu FotosInSets hinzu? Um eine Beziehung in photosInSets hinzuzufügen, müssen Sie gültige _from- und _to-Werte für diese Tabelle haben, damit der Photosets-Eintrag und der Fotoeintrag dort sein müssen. –

+0

Ich kenne die IDs der Fotos in den Sets, aber das ist alles. So habe ich genug Informationen, um die Kanten zu erstellen, aber nicht die Dokumente. Nun, ich könnte einfach ein leeres Fotodokument erstellen und es später aktualisieren ... –