5

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

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

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

match(p:Book) 返回 p.title,然后我可以看到 title 属性的值,

我有 3 个节点书籍: Book( title:"book1", author:"author1" ) Book( title:"book2", author:"author2" ) Book( title:"book3", author:"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) ); 
}  }

这只是打印如下内容:
->node<0>
->node<1>
->node<2>

4

3 回答 3

3

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

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();
    }
}
于 2018-05-17T22:24:24.910 回答
1

您可以使用此特征,您将在 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;
于 2019-11-19T10:40:54.667 回答
1

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

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

  • get(key) :获取key节点的值。您将收到一个Value对象,该对象具有某种方法可以将此对象转换为string, boolean, ...
  • 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。

于 2018-02-01T09:25:55.057 回答