【问题标题】:Cypher query returning null values even when the pattern is available in database即使模式在数据库中可用,Cypher 查询也会返回空值
【发布时间】:2015-10-01 09:24:51
【问题描述】:

这个密码查询有问题

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

即使图形数据库中有多个节点可用,它也会为 ace 节点返回空值。 但有时如果 db 中有 4 个 ace 节点,它会返回正确的值,例如 4 行。 我正在写的代码是关于 spring security acl 参考链接: https://github.com/shazin/spring-security-acl-neo4j/blob/master/src/main/java/org/springframework/security/acls/neo4j/Neo4jLookupStrategy.java

请提出修改建议。

【问题讨论】:

    标签: neo4j cypher spring-data-neo4j


    【解决方案1】:

    你的问题来自OPTIONAL MATCH,根据Neo4j's documentationOPTIONAL MATCH返回NULL如果没有找到属性或元素。

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

    【讨论】:

      【解决方案2】:

      您在可选匹配中绑定 ace 节点。当该可选匹配无法匹配某些内容时,ace 将为空。

      如果您认为可选匹配在不成功的情况下应该成功,也许您可​​以提供一个示例。一个好的方法是在http://console.neo4j.org创建一个小样本图

      WHERE 子句中的条件看起来像是属于您的MATCH 子句。您可能希望将WHERE 子句向上移动,然后您可以完全删除WITH。它不会影响空值,但它会使您的查询更高效且更具可读性。 (另外,WHERE 子句中不需要括号。)

      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 ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多