1. HOME
  2. ブログ
  3. テクノロジー
  4. Neo4j
  5. 末端の親ノードを取得する

BLOG

ブログ

Neo4j

末端の親ノードを取得する

Neo4jの話です。
つぎのようなpathの場合、

MATCH path=(c:C_Patent)-[r:ORIGINAL|REGIONAL|PRIORITY*0..]->(p)
WHERE
	c.Name = "2001-0004-XXXX" // 子ノードの条件
	AND (p:C_Patent OR p:C_Design OR p:C_Trademark OR p:C_Gazette) // 親ノードのラベル条件
	AND NOT (p)-[:ORIGINAL|REGIONAL|PRIORITY]->() // 末端であることの条件
RETURN path;

‘path’の部分を以下のように変更すれば、末端親ノードのNameの配列が取得できます。

MATCH(c:C_Patent)-[r:ORIGINAL|REGIONAL|PRIORITY*0..]->(p)
WHERE
	c.Name = "2001-0004-XXXX" // 子ノードの条件
	AND (p:C_Patent OR p:C_Design OR p:C_Trademark OR p:C_Gazette) // 親ノードのラベル条件
	AND NOT (p)-[:ORIGINAL|REGIONAL|PRIORITY]->() // 末端であることの条件
RETURN COLLECT(DISTINCT p.Name);

◆リレーションの数やモジュールも取得したいのなら、

MATCH(c:C_Patent)-[r:ORIGINAL|REGIONAL|PRIORITY*0..]->(p)
WHERE
	c.Name = "2001-0004-XXXX" // 子ノードの条件
	AND (p:C_Patent OR p:C_Design OR p:C_Trademark OR p:C_Gazette) // 親ノードのラベル条件
	AND NOT (p)-[:ORIGINAL|REGIONAL|PRIORITY]->() // 末端であることの条件
RETURN COLLECT(DISTINCT {Name:p.Name, Size:SIZE(r), module:LABELS(p)[0]})

◆リレーション数でソートする場合は、

MATCH(c:C_Patent)-[r:ORIGINAL|REGIONAL|PRIORITY*0..]->(p)
WHERE
	c.Name = "2001-0004-XXXX" // 子ノードの条件
	AND (p:C_Patent OR p:C_Design OR p:C_Trademark OR p:C_Gazette) // 親ノードのラベル条件
	AND NOT (p)-[:ORIGINAL|REGIONAL|PRIORITY]->() // 末端であることの条件
WITH DISTINCT {Name:p.Name, Size:SIZE(r), module:LABELS(p)[0]} AS map ORDER BY map.Size
RETURN COLLECT(DISTINCT map)
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

関連記事