【问题标题】:How to get vertex using vertex property for Java application?如何使用 Java 应用程序的顶点属性获取顶点?
【发布时间】:2020-12-09 11:17:57
【问题描述】:

我们有一个 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,但不幸的是这不起作用。

【问题讨论】:

  • 您是使用元属性创建该列表(三个property 步骤)还是只是将Java 列表存储到属性中?
  • @KelvinLawrence 这只是一个例子。我在方法参数中传递 List 电话。
  • 我在下面添加了一个答案,解释了您所看到的内容。

标签: java gremlin graph-databases tinkerpop janusgraph


【解决方案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]

但是,并非所有 DB 都支持直接存储 Java 类型(如 List)。为了获得更大的灵活性,您可能希望使用创建列表。

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]    
    

【讨论】:

  • 我认为它不会在java中工作?我认为存在一些问题。这对我来说不是完美的答案。谢谢楼主
  • 为什么你说它在 Java 中不起作用? - 我一直在用 Java 做上述事情
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-19
  • 2021-01-08
  • 2016-08-14
  • 2020-09-28
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多