#java #gremlin #graph-databases #tinkerpop #janusgraph
#java #gremlin #граф-базы данных #tinkerpop #janusgraph
Вопрос:
У нас есть User.java класс.
public class User{
private String name;
private List<String> phone;
//setters and getters
}
Внутри этого созданного узла
{
"name": "Ibney",
"phone": ["123","704","456"]
}
теперь я хочу получить вершину пользователя с помощью телефона. У меня есть список телефонных номеров, но другой, и один из строк 704 совпадает.
Как получить пользовательскую вершину. Используя любой
Я использую так
List<String> phone = new ArrayList<>();
phone.add("204");
phone.add("704");
List<Vertex> vertex = g.V().hasLabel(label.getLabel()).has(phone, P.within(phone)).toList();
значение совпадения равно 704, но, к сожалению, это не работает.
Комментарии:
1. Вы создали этот список, используя мета-свойства (три
property
шага), или вы просто сохранили список Java в свойстве?2. @KelvinLawrence это всего лишь пример. Я передаю List<String> phone в параметр метода.
3. Я добавил ответ ниже, который объясняет, что вы видите.
Ответ №1:
Если вы сохраняете свойство как фактический список Java within
, шаг не будет заглядывать внутрь него. Вам unfold
это нужно. В соответствии с:
gremlin> phone = ["123","704","456"]
gremlin> g.addV('test').property('phone',phone)
==>v[60867]
gremlin> g.V().has('phone').where(values('phone').unfold().is(within(phone)))
==>v[60867]
Однако не все базы данных поддерживают прямое хранение типов Java, таких как список. Для большей гибкости вы можете создать свой список с помощью.
gremlin> g.addV('test').
......1> property(list,'phone',"123").
......2> property(list,'phone',"704").
......3> property(list,'phone',"456")
==>v[60869]
gremlin> g.V().has('phone',within(phone))
==>v[60869]
Комментарии:
1. Я думаю, что это не будет работать на Java? Я думаю, что есть какая-то проблема. Для меня это не идеальный ответ. спасибо, сэр
2. Почему вы говорите, что это не будет работать на Java? — Я все время делаю это на Java