似乎我太累了,找不到解决的办法,也许有人给了我一个提示。
我在Neo4J中构建了一个图形,我通过neo4jphp (普通人)连接它。使用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中直接通过Cypher查询图形时,如下所示
MATCH (user:PERSON {status: "active"})-[relation:IS_MEMBER_OF{status:"active"}]->(team:GROUP {name:"LOCAL_USER"} )
RETURN user
ORDER BY user.name;我得到正确的用户数。
当我使用neo4jphp库(everyman)时,我接收到一些用户双倍--结果集具有多个具有相同用户的元素。我想不出他们为什么会有不同的行为,但我认为我可能以某种方式搞砸了他们之间的关系。但是,我仍然想知道,当您通过GUI或everyman发送相同的密码查询时,为什么返回不同数量的记录?我需要一个提示,如何更改可能的查询,以确保每个用户只获得一条记录,因为每个用户只有一次连接到LOCAL_USER组。
谢谢你把我推向正确的方向。
发布于 2014-11-09 19:44:12
我认为您获得了双倍,因为您有多个路径(例如,多个团队)供用户使用,请使用RETURN distinct user
对于import语句,使用错误的方法,而不是使用方法。
按唯一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;https://stackoverflow.com/questions/26832312
复制相似问题