Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.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 加入密码查询?_Neo4j_Cypher - Fatal编程技术网

Neo4j 加入密码查询?

Neo4j 加入密码查询?,neo4j,cypher,Neo4j,Cypher,似乎我没有正确理解可选匹配 我有一个始终存在的节点(t)。该节点(t)可以与其他节点(q)、(o)有关系-可能与它们两个或其中一个都有关系 我试着用一句话来表达 “显示节点(t)的所有信息,如果有相关节点(o),则显示所有(o),如果有节点(q),则显示(q)-如果其中一个不可用,则显示您拥有的信息” 我可以做一个比赛和一个可选的比赛,比如 MATCH (t) -- (o) WHERE t.id = "1234" OPTIONAL MATCH (t) -- (q) RETURN q,t,o

似乎我没有正确理解可选匹配

我有一个始终存在的节点(t)。该节点(t)可以与其他节点(q)、(o)有关系-可能与它们两个或其中一个都有关系

我试着用一句话来表达

“显示节点(t)的所有信息,如果有相关节点(o),则显示所有(o),如果有节点(q),则显示(q)-如果其中一个不可用,则显示您拥有的信息”

我可以做一个比赛和一个可选的比赛,比如

MATCH (t) -- (o) WHERE t.id = "1234" 
OPTIONAL MATCH (t) -- (q) 
RETURN q,t,o
当我在(t)和(o)之间有一条路径时,无论我是否有(q),我都会成功。但当我没有(o)和(q)时,我失败了。如果我切换,把(q)放在第一行,把((o)放在第二行,正好相反,我总是松开其中一个

我需要如何查询才能同时获得(o)、(q)或仅仅获得其中一个,而不管它们中有哪一个

编辑
  • 所有节点(t)、(o)和(q)都有附加标签
  • 我没有以正确的方式进行查询,因为我认为这无关紧要,所以失败的查询是错误的 匹配(o:Label3)--(t:Label1),其中t.id=“1234” 可选匹配(q:Label2)--(t:Label1) 返回q,t,o
  • “显示节点(t)的所有信息以及是否存在相关节点 (o) 然后也是(o)的全部,如果有一个节点(q),那么也是(q) -如果其中一个不可用,则显示您所拥有的”


    如果
    o
    q
    具有唯一的ID,则可以使用两个
    可选数学
    来完成此操作。这样:

    MATCH (t) WHERE t.id = "1234"
    OPTIONAL MATCH (t) -- (o {id:567})
    OPTIONAL MATCH (t) -- (q {id:568}) 
    RETURN q,t,o
    

    如果您只想获取连接到
    t
    的所有节点的集合:

    MATCH (t) WHERE t.id = "1234"
    OPTIONAL MATCH (t) -- (o)
    RETURN t, COLLECT(o) AS others;
    

    q
    o
    之间的区别是什么?您只是想让所有节点都连接到
    t
    (如果有的话),还是想做其他事情?(q)和(o)有不同的标签,对不起,我没有提到。似乎两条路径都以(t)开头,而不是以(q)-(t)和(t)-(o)开头似乎解决了这个问题。查询匹配(t:label1)-(q:label2)其中t.id=1可选匹配(t:label1)-(o:label3)其中t.id=1返回t,q,o工作正常。
    o
    q
    将具有相同的值。此外,这些值将重复(由于笛卡尔积的影响)。我相信t、o和q都有ID,@Balael发布的查询是问题的简化。我建议将这些详细信息放入您的答案中。否则,这没有多大意义。感谢您的支持,不幸的是,当查询启动时,他们还不知道ID。否则,您就可以解开这个谜:)@Balael试一试:
    MATCH(t)WHERE t.id=“1234”可选匹配(t)-(o)可选匹配(t)-(q)WHERE q o返回q,t,o
    您的方法让我再次思考,因为我不确定自己做错了什么-然后我相信我发现了,如果它这么简单的话。我的查询错了,对了,我应该进行匹配(t)--(o)其中t.id=1可选匹配(t)--(q)其中t.id=1返回t,o,q。现在可以了,看起来我的顺序不对,从(t)开始两条路径现在都可以了,没想到这会有什么不同。非常感谢山姆给你的例子。