使用 java 从 neo4j 数据库查询两个节点
Query two nodes from neo4j database using java
我是 Neo4j 的新手,我想查询仅包含节点的 Neo4j 数据库,以便根据我已有的 2 个列表在它们之间创建链接。
例如,我想将名称在 List A
中的节点与名称在 List B
中的节点连接起来。
这是我写的代码:
public class Main {
public static void main(String[] args) {
GraphDatabaseFactory graphDbFactory = new GraphDatabaseFactory();
GraphDatabaseService graphDb = graphDbFactory.newEmbeddedDatabase("C:\Zakaria\NeoTests\Tetralecture");
ExecutionEngine execEngine = new ExecutionEngine(graphDb);
/* Here is a loop to read from listA and listB so no need to worry about them */
try (Transaction ignored = graphDb.beginTx()) {
String query = "MATCH (auteur1:AUTEUR{Name:'" + listA.get(i) + "'}), (auteur2:AUTEUR{Name:'" + listB.get(j) + "'}) return auteur1, auteur2";
ExecutionResult execResult = execEngine.execute(query);
Iterator<Node> aut_column = execResult.columnAs("auteur1");
for(Node node : IteratorUtil.asIterable(aut_column)) {
String nodeResult = node + " : " + node.getProperty("Name");
System.out.println(nodeResult);
}
}
}
}
这个例子只显示一列的一个作者列表auteur1
,我希望能够显示他们两个。
如果我能做到这一点,我认为操作两个列表中的节点并在它们之间创建链接会更容易。
感谢您的帮助!
这对你有用吗?
public class Main {
public static void main(String[] args) {
GraphDatabaseFactory graphDbFactory = new GraphDatabaseFactory();
GraphDatabaseService graphDb = graphDbFactory.newEmbeddedDatabase("C:\Zakaria\NeoTests\Tetralecture");
ExecutionEngine execEngine = new ExecutionEngine(graphDb);
/* Here is a loop to read from listA and listB so no need to worry about them */
try (Transaction ignored = graphDb.beginTx()) {
String query = "MATCH (auteur1:AUTEUR{Name:'" + listA.get(i) + "'}), (auteur2:AUTEUR{Name:'" + listB.get(j) + "'}) return auteur1, auteur2";
ExecutionResult execResult = execEngine.execute(query);
for(Map<String, Object> row : execResult) {
final Node node1 = (Node)row.get("auteur1");
final Node node2 = (Node)row.get("auteur2");
String nodeResult = node1 + " : " + node1.getProperty("Name") + "; " + node2 + " : " + node2.getProperty("Name");
System.out.println(nodeResult);
}
}
}
}
我是 Neo4j 的新手,我想查询仅包含节点的 Neo4j 数据库,以便根据我已有的 2 个列表在它们之间创建链接。
例如,我想将名称在 List A
中的节点与名称在 List B
中的节点连接起来。
这是我写的代码:
public class Main {
public static void main(String[] args) {
GraphDatabaseFactory graphDbFactory = new GraphDatabaseFactory();
GraphDatabaseService graphDb = graphDbFactory.newEmbeddedDatabase("C:\Zakaria\NeoTests\Tetralecture");
ExecutionEngine execEngine = new ExecutionEngine(graphDb);
/* Here is a loop to read from listA and listB so no need to worry about them */
try (Transaction ignored = graphDb.beginTx()) {
String query = "MATCH (auteur1:AUTEUR{Name:'" + listA.get(i) + "'}), (auteur2:AUTEUR{Name:'" + listB.get(j) + "'}) return auteur1, auteur2";
ExecutionResult execResult = execEngine.execute(query);
Iterator<Node> aut_column = execResult.columnAs("auteur1");
for(Node node : IteratorUtil.asIterable(aut_column)) {
String nodeResult = node + " : " + node.getProperty("Name");
System.out.println(nodeResult);
}
}
}
}
这个例子只显示一列的一个作者列表auteur1
,我希望能够显示他们两个。
如果我能做到这一点,我认为操作两个列表中的节点并在它们之间创建链接会更容易。
感谢您的帮助!
这对你有用吗?
public class Main {
public static void main(String[] args) {
GraphDatabaseFactory graphDbFactory = new GraphDatabaseFactory();
GraphDatabaseService graphDb = graphDbFactory.newEmbeddedDatabase("C:\Zakaria\NeoTests\Tetralecture");
ExecutionEngine execEngine = new ExecutionEngine(graphDb);
/* Here is a loop to read from listA and listB so no need to worry about them */
try (Transaction ignored = graphDb.beginTx()) {
String query = "MATCH (auteur1:AUTEUR{Name:'" + listA.get(i) + "'}), (auteur2:AUTEUR{Name:'" + listB.get(j) + "'}) return auteur1, auteur2";
ExecutionResult execResult = execEngine.execute(query);
for(Map<String, Object> row : execResult) {
final Node node1 = (Node)row.get("auteur1");
final Node node2 = (Node)row.get("auteur2");
String nodeResult = node1 + " : " + node1.getProperty("Name") + "; " + node2 + " : " + node2.getProperty("Name");
System.out.println(nodeResult);
}
}
}
}