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



我在Ruby中使用Neo4j与gem Neography编码。在执行查询时,我使用neoography提供的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)是否有一种方法可以使用neoography重用以前查询的结果?

2)是否建议使用Neography提供的方法,如@neo。Create_node而不是直接使用execute_neo4j_query ?我选择后者是因为我不确定封装的方法是否能满足我的任务。所以,如果你能把我上面的代码重写成原生的Neography代码,我将不胜感激。

我不知道Neography,但我可以尝试回答问题#1,因为这似乎可以通过更改您的第三个Cypher查询来回答。

因为你的2个初始查询似乎得到了用户1和用户2的节点id,你应该能够避免通过使用START子句再次搜索这些节点。您需要使用前两个查询返回的2个节点id指定一个参数映射。

  START user1=node(#{params[:node_id_1]}), user2=node(#{params[:node_id_2]})
  CREATE UNIQUE (user1)-[:FOLLOW]->(user2)
  1. 如果你不知道为什么要用start,就不要再用了
  2. 在neography中使用事务性密码支持
  3. 在密码查询中使用参数,如MATCH (u:User {name:{name}}) RETURN u

我也不懂Neography,但是您可以稍微简化一下查询,使用这一行:

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

相关内容

  • 没有找到相关文章

最新更新