簡體   English   中英

Neo4j密碼在where子句中設置操作

[英]Neo4j cypher set operation in where clause

我希望在Neo4j密碼中執行設置操作。 基本上,我從兩個方向與一組節點建立關系,我只想找到一側上與所有另一側上都有關系的節點。

給定一個類似於以下內容的圖形:

  /----- b1 -\
 /            \
a ------ b2 --c1
 \          \/
  \         /\
   \---- b3 --c2     

我只希望返回c1 ,因為c2b1有直接關系,而ab1有直接關系。

我有一個似乎可行的解決方案,但我不知道它是否最佳。

match (a:A)--(b:B) 
with a, count(b) as bCount1
    match (a)--(b:B)--(c:C)
with c, bCount1, count(b) AS bCount2
where bCount1 = bCount2
return c

您可以使用標簽將節點表示為一組或另一組(假設它們是互斥的)。 我還假設節點“ a”是根節點,並且/或者不需要直接連接到“ c1”或“ c2”。

在您上面的ASCII藝術示例中,假設“ b1”的標簽為“ Set1”,所有其他標簽的標簽為“ Set2”,則可能會這樣:

MATCH (n:Set2)--(o:Set1), (allS1:Set1)
WHERE length(collect(o)) = count(allS1)
WITH n, length(collect(o))
RETURN n

...或其變體。 同樣,這是假設您一次要進行一次此設置。 兩者都不應該花費太多精力。 它也可能不是最有效的,但應該可以解決問題。 試一試,讓我們知道。

HTH和往常一樣,如果有更好的方法(可能會做得更好),讓我們看看那些答案!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM