我正在使用 Neo4j 和 gem Neography 在 Ruby 中进行编码。在进行查询时,我使用Neography提供的方法execute_neo4j_query。我不确定最佳实践。
假设我使用以下代码来获取用户:
user1 = @neo.execute_neo4j_query("
MATCH (user:User {user_id: '#{params[:user_id_1]}'})
RETURN id(user)
LIMIT 1
")
并以类似方式获取另一个用户
user2 = @neo.execute_neo4j_query("
MATCH (user:User {user_id: '#{params[:user_id_2]}'})
RETURN id(user)
LIMIT 1
")
然后我对这两个用户做了一些事情。
现在我需要在这两个用户之间创建边缘,所以我这样做了
@neo.execute_neo4j_query("
MATCH (user1:User {user_id: '#{params[:user_id_2]}'})
MATCH (user2:User {user_id: '#{params[:user_id_2]}'})
CREATE UNIQUE (user1)-[:FOLLOW]->(user2)
")
但是,我认为这种方法并不是最佳方法,因为我两次查询了相同的两个用户。
我的问题是:
1) 有没有办法使用 Neography 重用以前查询的结果?
2) 除了直接使用execute_neo4j_query之外,是否建议使用Neography提供的方法,例如@neo.create_node?我选择后者是因为我不确定封装的方法是否能够满足我的任务。因此,如果您能用原生 Neography 代码重写我的上述代码,我们将不胜感激。
最佳答案
我不懂 Neography,但我可以尝试回答问题 #1,因为这似乎可以通过更改您的第三个 Cypher 查询来回答。
由于您的 2 个初始查询似乎正在获取用户 1 和用户 2 的节点 ID,因此您应该能够避免使用 START
子句再次搜索这些节点。您需要使用前 2 个查询返回的 2 个节点 ID 来指定参数映射。
START user1=node(#{params[:node_id_1]}), user2=node(#{params[:node_id_2]})
CREATE UNIQUE (user1)-[:FOLLOW]->(user2)
关于neo4j - Neo4j 中记住和重用先前查询结果的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23831483/