我正在使用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 - ;
答案 0 :(得分:1)
如果您在查询中返回一个节点,Neo4j的驱动程序将为您提供一个Node对象。
此对象有一些方法可以检索内部数据:
key
值。您将收到一个Value
object,其中有一些方法可以将此对象投射到string
,boolean
,... key
属性可在此处找到更多详细信息: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;