【问题标题】:getting properties of a node in neo4j java driver在 Neo4j Java 驱动程序中获取节点的属性
【发布时间】:2018-07-11 08:19:32
【问题描述】:

我正在使用neo4j,我有带有neo4j服务器的linux笔记本电脑,我做了所有配置,所以我可以从mac访问ip/浏览器,之后我试图从java项目远程使用它我正在使用 java-driver,因为 neo4j-enbedded 似乎不支持远程连接,所以问题是如何获取所有节点并打印属性:

在下面的代码中我有 match(p:Book)return p

如果我尝试迭代“p”,我没有得到属性,但我正在使用类似

match(p:Book)返回p.title,就可以看到title属性的值了,

我有 3 个节点的书: 书(标题:“book1”,作者:“author1”) 书(标题:“book2”,作者:“author2”) 书(标题:“book3”,作者:“author3”)

try ( Session session = Neo4jDriver.getInstance( URI.create( "bolt://10.0.0.17:7687" ),
                "neo4j", "pass" ).session() )
        {
       StatementResult result = session.run( "match(p:Book) return p" );

 while ( result.hasNext() )
{
    Record res = result.next();

    System.err.println(" --> "+res.get(0) ); 
}  }

这只是打印如下内容:
->节点
->节点
->节点

【问题讨论】:

    标签: java neo4j neo4j-java-api


    【解决方案1】:

    接下来,您需要从节点中提取值,如下所示:

    List<Pair<String,Value>> values = res.fields();
    for (Pair<String,Value> nameValue: values) {
        if ("p".equals(nameValue.key())) {  // you named your node "p"
            Value value = nameValue.value();
            // print Book title and author
            String title = value.get("title").asString();
            String author = value.get("author").asString();
        }
    }
    

    【讨论】:

      【解决方案2】:

      如果您在查询中返回一个节点,Neo4j 的驱动程序会给您一个 Node 对象。

      这个对象有一些方法可以检索里面的数据:

      • get(key) : 获取节点的key 值。您将收到一个Value object,它有一些方法可以将此对象转换为stringboolean、...
      • contains(key) : 知道节点是否有key属性
      • keys() : 获取节点属性列表
      • ...

      更多细节可以在这里找到:https://github.com/neo4j/neo4j-java-driver/blob/1.6/driver/src/main/java/org/neo4j/driver/v1/types/MapAccessor.java

      在您的示例中,您只打印 Node 对象,因此您正在调用它的 toString() 方法,并且此方法不会打印节点的所有值,而只是打印它的 id。

      【讨论】:

      • tnx 用于回复,如您所见,我正在使用“r.get(0)”,所以据我所知,我应该获得该节点的第一个属性,但它没有,在密码控制台上,我看到正在返回整个节点,但不是在这里,我会检查并在找到答案时发布答案
      • resRecord,而不是 Node。因此,res.get(0) 获取记录中的第一个(在本例中也是唯一的)值,即您感兴趣的节点。
      【解决方案3】:

      您可以使用此特征,您将在 Object 列表中获得所有结果:

      String cypherQuery  = "match(p:Book) return p";
      List<Map<String,Object>> nodeList=  new ArrayList<>();
      StatementResult result = session .run( cypherQuery);
      while (result.hasNext()) {
          nodeList.add(result.next().fields().get(0).value().asMap());
      }
      return nodeList;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多