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

时间:2014-05-23 14:11:17

标签: neo4j neography

我使用Neo4j和Ruby 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代码中重写上述代码,我们将非常感激。

3 个答案:

答案 0 :(得分:1)

我不知道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)

答案 1 :(得分:0)

  1. 如果您不知道为什么要使用它,请不要再使用start
  2. 使用交易cypher support in neography
  3. 在您的密码查询中使用参数,例如MATCH (u:User {name:{name}}) RETURN u

答案 2 :(得分:0)

我也不知道Neography,但你可以稍微简化一下这个问题:

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