在neo4j java驱动程序中获取节点的属性

时间:2018-02-01 04:38:48

标签: java neo4j neo4j-java-api

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

在下面的代码中我匹配(p:Book)返回p

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

匹配(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) ); 
}  }

这只是印刷的东西:
- >节点&℃,GT;
- >节点&LT 1为卤素;
- >节点&LT 2 - ;

3 个答案:

答案 0 :(得分:1)

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

此对象有一些方法可以检索内部数据:

  • get(key):获取节点的key值。您将收到一个Value object,其中有一些方法可以将此对象投射到stringboolean,...
  • 包含(键):知道节点是否具有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。

答案 1 :(得分: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 :(得分:0)

您可以使用此特征,并将所有结果显示在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;