Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 即使模式在数据库中可用,Cypher查询也返回空值_Neo4j_Cypher_Spring Data Neo4j - Fatal编程技术网

Neo4j 即使模式在数据库中可用,Cypher查询也返回空值

Neo4j 即使模式在数据库中可用,Cypher查询也返回空值,neo4j,cypher,spring-data-neo4j,Neo4j,Cypher,Spring Data Neo4j,这个密码查询有什么问题吗 MATCH (owner:SidNode)<-[:OWNED_BY]-(acl:AclNode)-[:SECURES]->(class:ClassNode) OPTIONAL MATCH (acl)<-[:COMPOSES]-(ace:AceNode)-[:AUTHORIZES]->(sid:SidNode) WITH acl, ace, owner, sid, class WHERE (acl.objectIdIdentity

这个密码查询有什么问题吗

MATCH (owner:SidNode)<-[:OWNED_BY]-(acl:AclNode)-[:SECURES]->(class:ClassNode) 
OPTIONAL MATCH (acl)<-[:COMPOSES]-(ace:AceNode)-[:AUTHORIZES]->(sid:SidNode) 
WITH acl, ace, owner, sid, class 
    WHERE  (acl.objectIdIdentity = {objectIdIdentity1} AND class.className = {className1})   
RETURN 
owner.principal AS aclPrincipal, 
owner.sid AS aclSid, 
acl.objectIdIdentity AS objectIdIdentity, 
ace.aceOrder AS aceOrder, 
ID(acl) AS aclId, 
acl.parentObject AS parentObject, 
acl.entriesInheriting AS entriesInheriting, 
ID(ace) AS aceId, ace.mask AS mask, 
ace.granting AS granting, 
ace.auditSuccess AS auditSuccess, 
ace.auditFailure AS auditFailure, 
sid.principal AS acePrincipal, 
sid.sid AS aceSid, 
class.className AS className  
ORDER BY acl.objectIdIdentity ASC, ace.aceOrder ASC
匹配(所有者:SidNode)(类:ClassNode)
可选匹配(acl)(sid:SidNode)
使用acl、ace、所有者、sid、类
其中(acl.objectidEntity={objectidEntity1}和class.className={className1})
返回
owner.principal作为委托人,
owner.sid作为aclSid,
acl.objectidEntity作为objectidEntity,
aceOrder作为aceOrder,
ID(acl)作为aclId,
acl.parentObject作为parentObject,
acl.entriesInheriting作为entriesInheriting,
ID(ace)作为aceId,ace.mask作为mask,
A.授予作为授予,
ace.auditSuccess作为auditSuccess,
ace.auditFailure作为auditFailure,
sid.principal作为acePrincipal,
sid.sid作为aceSid,
class.className作为className
按acl.objectidEntity ASC排序,ace.aceOrder ASC
它为ace节点返回空值,即使graph db中有多个可用节点。 但有时,如果数据库中有4个ace节点,它会返回正确的值,比如4行。 我写的代码是关于SpringSecurityACL的 参考链接:


请建议修改。

您的问题来自于
可选匹配
,根据,
可选匹配
如果未找到属性或元素,则返回
NULL


因此,您将获得
NULL
值。如果您的acl节点没有任何与其相关的ace节点,则该节点将替换为
NULL

您可以在可选匹配中绑定ace节点。当该可选匹配未能匹配某个内容时,
ace
将为空

如果您认为可选匹配在不成功的情况下应该成功,也许您可以提供一个示例。这样做的一个好方法是在

WHERE
子句中的条件似乎属于
MATCH
子句。您可能希望将
WHERE
子句向上移动,然后可以将
一起删除。它不会影响空值,但会使查询更高效、更可读。(另外,
WHERE
子句中不需要括号。)

匹配(所有者:SidNode)(类:ClassNode)
其中acl.objectidEntity={objectidEntity1}和class.className={className1}
可选匹配(acl)(sid:SidNode)
返回。。。
MATCH (owner:SidNode)<-[:OWNED_BY]-(acl:AclNode)-[:SECURES]->(class:ClassNode)
WHERE acl.objectIdIdentity = {objectIdIdentity1} AND class.className = {className1}
OPTIONAL MATCH (acl)<-[:COMPOSES]-(ace:AceNode)-[:AUTHORIZES]->(sid:SidNode)
RETURN ...