#gremlin #graph-databases #tinkerpop
Вопрос:
ОТРЕДАКТИРОВАНО: После ответа @Prashant я понял, что порядок моих выходных данных должен быть сохранен, поэтому, соответственно, я отредактировал свой исходный вопрос и опубликовал его повторно.
g.addV('person').property(id, 1) g.addV('person').property(id, 2) g.addV('person').property(id, 3) g.addV('person').property(id, 4) g.addV('person').property(id, 5) g.addV('person').property(id, 6) g.addV('person').property(id, 7) g.addV('person').property(id, 8) g.addV('person').property(id, 9) g.addV('person').property(id, 10) g.addV('person').property(id, 11) g.addV('person').property(id, 12) g.addV('product').property(id, 13) g.V(2).addE('related').to(V(1)) g.V(2).addE('related').to(V(5)) g.V(5).addE('related').to(V(6)) g.V(5).addE('related').to(V(7)) g.V(5).addE('related').to(V(9)) g.V(7).addE('related').to(V(8)) g.V(9).addE('related').to(V(4)) g.V(9).addE('related').to(V(10)) g.V(4).addE('related').to(V(3)) g.V(10).addE('related').to(V(11)) g.V(10).addE('related').to(V(12)) g.V(1).addE('chose').to(V(13)) g.V(8).addE('chose').to(V(13)) g.V(9).addE('chose').to(V(13)) g.V(3).addE('chose').to(V(13)) g.V(11).addE('chose').to(V(13)) g.V(12).addE('chose').to(V(13))
Я хочу перейти от корневого узла (2) к конечным узлам (1, 6, 8, 3, 11 и 12). Во время такого обхода я хочу получить узлы, которые подключены к узлу продукта 13, т. Е.) Я хочу написать запрос, который возвращает 1, 8, 9, 3, 11 и 12.
Ответ @Prashant:
g.V().repeat(out().simplePath()).until(out().hasLabel("product")).dedup()
выходы
==gt;v[1] ==gt;v[9] ==gt;v[8] ==gt;v[3] ==gt;v[11] ==gt;v[12]
Однако порядок моего требуемого вывода составляет 1, 8, 9, 3, 11 и 12, т. е.) на каждом уровне требуется выбрать дочерний узел и пройти весь путь до его конечного узла. Порядок узлов на каждом уровне дерева гарантированно будет в порядке возрастания. Какая-нибудь помощь здесь, пожалуйста? Спасибо!!
Ответ №1:
Приведенный ниже запрос должен выполнить эту работу.
g.V().repeat(out().simplePath()).until(out().hasLabel("product")).dedup()
Комментарии:
1. Когда я попробовал ваш ответ, я понял, что порядок выходных узлов важен для моих требований. Поэтому я отредактировал свой вопрос. Дайте мне знать, если вы можете мне здесь помочь? Спасибо!!
2. @Bala не рекомендуется полагаться на порядок, в котором база данных хранит данные. Потому что разные реализации серверов gremlin могут сохранять разные индексы, и это может повлиять на порядок, который вы получите. Таким образом, если у вас есть свойство, которое можно использовать для упорядочивания результирующего набора, вы сможете написать запрос, который даст вам тот же порядок, что и для индексов сервера. Если нет, ИМО, что вы делаете это неправильно.
3. Согласен, я не полагаюсь на индексы. Это примерный вопрос, который я создал, чтобы воспроизвести свой реальный сценарий. Поэтому, чтобы все было просто, я полагаюсь на индексы. В моем реальном случае у меня было бы время создания события, т. Е.) 4 (и 3), 10 (и 11, 12) можно поменять местами, но их свойство времени создания события поможет мне упорядочить результирующий набор.
4. в этом случае вы можете добавить соответствующий запрос с
order().by()
помощью . Шаг за шагом можно использовать свойство, которое вы хотите использовать для заказа. помогает ли это тому, что вам нужно ?