Go语言 寻找(多个)“最低”节点

8aqjt8rx  于 2023-10-14  发布在  Go
关注(0)|答案(1)|浏览(104)

案例:

我有节点Categories,看起来像下面,我创建了一个从类别到父节点的关系。

CREATE(p1:Categorie {
  id: 2,
  parent_id: 1,
  name: "Kids",
  is_active: true ,
  position: 1,
  level: 1,
})
CREATE(c1:Categorie {
  id: 5,
  parent_id: 2,
  name: "Toys",
  is_active: true ,
  position: 1,
  level: 2,
})

//New root category
CREATE(p2:Categorie {
  id: 9,
  parent_id: 1,
  name: "Holiday",
  is_active: true ,
  position: 1,
  level: 1,
})
CREATE(c2:Categorie {
  id: 12,
  parent_id: 9,
  name: "Water",
  is_active: true ,
  position: 1,
  level: 2,
})

CREATE(c1)-[:CHILD_OF]->(p1)
CREATE(c2)-[:CHILD_OF]->(p2)

然后我有一个产品,它有一个像这样的categorie_ids数组:

{
    "sku": "abc",
    "name": "Electric boot",
    "categorie_ids": [ 
        1,
        5,
        9,
        12
    ]
}

API返回产品“在”的所有id。对我来说,所有的关系都是如此混乱。这个例子是最小的,但实际上,每个产品可以有多达20个关系。

问题/问题:

我想创建一个与类别中最低节点的关系。在这种情况下,产品有两个主要类别,因此有两个底部类别。所以我想创建一个与id 12和5的关系。
我就是无法理解密码查询。有人能照一下吗?

5vf7fwbs

5vf7fwbs1#

你基本上是在看下面的查询:
匹配类别节点,其中它们的id在给定的id列表中,并且这些节点不应该是任何其他类别的父节点
根据您的模型,您需要添加一个 predicate ,表示Categorie节点不具有CHILD_OF类型的INCOMING关系

WITH [1,5,9,12] AS categoryIds
MATCH (n:Categorie)
WHERE n.id IN categoryIds
AND NOT ()-[:CHILD_OF]->(n)
RETURN n.id

相关问题