上面的图表可以通过以下语句创建: (在此示例中,假设该图是完整的数据库)
CREATE (n0:Node)
CREATE (n1:Node)
CREATE (n2:Node {capital_letter: "A"})
CREATE (n3:Node)
CREATE (n4:Node)
CREATE (n5:Node)
CREATE (n6:Node {capital_letter: "B"})
CREATE (n7:Node)
CREATE (n8:Node {capital_letter: "A"})
CREATE (n9:Node {capital_letter: "B"})
CREATE (n10:Node)
CREATE (n2)-[:TRANSACTIONS]->(n0)
CREATE (n2)-[:TRANSACTIONS]->(n1)
CREATE (n2)-[:TRANSACTIONS]->(n3)
CREATE (n3)-[:TRANSACTIONS]->(n6)
CREATE (n4)-[:TRANSACTIONS]->(n2)
CREATE (n4)-[:TRANSACTIONS]->(n7)
CREATE (n6)-[:TRANSACTIONS]->(n5)
我的问题:
有没有办法查询这些节点的子图,然后将它们放入新的持久数据库中?
例如,我想建立一个新的数据库,其中包含所有 A 和 B 节点,以及它们的所有邻居以及它们之间的所有关系。
我想象如下:
INSERT INTO NEW DATABASE "NEW DB"
MATCH (a {capital_letter: "A"})
OPTIONAL MATCH (a {capital_letter: "A"})-[t1]-(a_neighbours)
MATCH (b {capital_letter: "B"})
OPTIONAL MATCH (b {capital_letter: "B"})-[t2]-(b_neighbours)
RETURN a, b, t1, t2, a_neighbours, b_neighbours
当然上面的语句不起作用,但是Neo4J中是否有任何可能构建这样的数据库?
请注意,我的数据库由 100Mio+ 节点组成,因此只有可行的方法才真正有帮助。
**我的最后一招是查询数据,将其导出到.csv,然后通过neo4j-admin工具构建一个新数据库https://neo4j.com/docs/operations-manual/current/tutorial/ neo4j-admin-导入/
我只是想知道是否还有其他(也许更快)的方法。
在 Neo4j 世界中,DML 和 DDL 语句并不是相互隔离的。通过转储文件或 CSV 导出源数据并导入是唯一的本机选项。
如果您通过另一种编程语言连接到 Neo4j,您可以在那里构建逻辑以从源图读取并将结果写入目标图。