在Neo4j中记住和重用以前查询结果的方法

在Neo4j中记住和重用以前查询结果的方法,neo4j,neography,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 ") 并以类似方

我正在使用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) 是否建议使用Neography提供的方法,例如@neo.create_node,而不是直接使用execute_neo4j_查询?我选择后者是因为我不确定封装的方法是否能够满足我的任务。所以,如果您能用本地Neography代码重写我的上述代码,我们将不胜感激。

我不懂Neography,但我可以尝试回答问题1,因为这似乎可以通过更改您的第三个密码查询来回答

由于您的两个初始查询似乎正在获取用户1和用户2的节点ID,因此您应该能够通过使用
START
子句避免再次搜索这些节点。您需要使用前两个查询返回的两个节点ID指定一个参数映射

  START user1=node(#{params[:node_id_1]}), user2=node(#{params[:node_id_2]})
  CREATE UNIQUE (user1)-[:FOLLOW]->(user2)
  • 如果您不知道为什么要使用start,请不要再使用它
  • 使用事务性
  • 在密码查询中使用参数,如
    MATCH(u:User{name:{name}})返回u

  • 我也不知道Neography,但您可以使用以下一行代码稍微简化查询:

       MATCH (a:User),(b:User) WHERE a.userId ={id1} AND b.userId = {id2} CREATE UNIQUE (a)-[r:FOLLOWS]->(b) RETURN r
    

    是的,但我认为即使使用ID进行查询也需要一些时间来沿着索引树进行搜索。我在想,如果我已经做过一次查询,是否可以存储准确的对象以供重用,例如创建一个指向获取的用户的指针,或者一个存储对象的变量。撇开新图不谈,如果可能的话,使用Cypher?我认为通过指定一个节点一个节点的ID,就可以找到一个节点“指针”