neo4jphp:Cypher和Resultset不同

时间:2014-11-09 19:27:15

标签: neo4j neo4jphp

似乎我太累了,无法找到解决方案,也许有人对我有所暗示。

我在Neo4J中构建了一个图表,我通过neo4jphp(everyman)连接。使用java浏览器,图表看起来不错,每个用户都存在一次,并且可能有几个他所属的组。

在创建用户时,我使用MERGE以避免它们加倍 - 比如

MERGE (user:PERSON {
firstname: "Max",
name: "Muster", 
password:"e52ddddddd9afb7b373f9da437",
title:"something",
login:"Nick",   
status:"active"   
}) 
ON CREATE SET user.uuid = "'.uniqid().'" // PHP function for a UUID
return user;

即使重新发送查询或重新加载页面,我也能看到正确的用户数。

用户通过对此类群组的查询进行连接

MATCH (user:PERSON), (team:GROUP)      
WHERE user.name= "Muster" AND user.firstname="Max" AND team.name="LOCAL_USER"
CREATE (user)-[:IS_MEMBER_OF {role:"user", status:"active"}]->(team);

在Neo4J的GUI中检查这个显示正确的图表(至少从我能看到的图表)。我有适量的用户和他们的关系。

当我在浏览器GUI中直接查询图表时,如此

MATCH (user:PERSON {status: "active"})-[relation:IS_MEMBER_OF{status:"active"}]->(team:GROUP {name:"LOCAL_USER"} )
RETURN user
ORDER BY user.name;

我获得了正确的用户数。

当我使用neo4jphp lib(everyman)时,我收到一些用户double - 结果集有几个具有相同用户的元素。我无法弄清楚他们为什么表现不同但我认为我可能会以某种方式弄乱关系。但我仍然想知道为什么同一个cypher查询返回不同数量的记录时,你通过GUI或每个人的lib发送它,我需要一个提示如何更改可能的查询,以确保我每个用户只获得一个记录用户只有一次连接到LOCAL_USER组。

感谢您将我推向正确的方向。

1 个答案:

答案 0 :(得分:3)

我认为你获得双打,因为你有多个路径(例如多个团队)供用户使用, 使用RETURN distinct user

对于您的导入声明,您的方法是错误的,而不是您的方法。

按唯一ID进行合并(例如在您的情况下登录),并使用ON CREATE SET ...

设置其他属性

使用参数而不是查询字符串中的文字值!!

MERGE (user:PERSON {login:{login}})
ON CREATE SET
  user.firstname = {firstname}, user.name= {name}, user.password = {password},
  user.title={title}, user.status = {status}, user.uuid = {uuid}
RETURN user;