neo4j - Neo4j 中记住和重用先前查询结果的方法

标签 neo4j neography

我正在使用 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/

相关文章:

java - 在 spring 数据 neo4j 中获取 2 列的查询的返回类型应该是什么?

neo4j - 参数化 Cypher 查询在 Neography 中不起作用

performance - Neo4j和OpenLink Virtuoso

Neo4j 密码 : Finding the largest disconnected subgraph fast

graph - neography 从索引中获取实际节点或节点 ID

java - 如何删除 neo4j 图中的所有关系?

ruby - 如何保存neo4j数据库?

neo4j - 在neo4j(浏览器)中隐藏中间节点

java - neo4j 2.0 无法将事务标记为仅回滚