我有一个基于被标记的事物概念的域,其建模类似于:
(item:Item)-[:TAGGED_BY]->(itemTag:Tag)
这是我第一次使用Cypher进行的实验,但我很难对所有某些给定标记标记的项目进行查询。例如:
CREATE
(item1:Item { name:"Item1"}),
(item2:Item { name:"Item2"}),
(item3:Item { name:"Item3"}),
(item4:Item { name:"Item4"}),
(item5:Item { name:"Item5"}),
(tag1:Tag { text: "T1" }),
(tag2:Tag { text: "T2" }),
(tag3:Tag { text: "T3" }),
(tag4:Tag { text: "T4" }),
item1-[:TAGGED_BY]->tag1,
item1-[:TAGGED_BY]->tag2,
item1-[:TAGGED_BY]->tag3,
item2-[:TAGGED_BY]->tag1,
item3-[:TAGGED_BY]->tag2,
item3-[:TAGGED_BY]->tag3,
item4-[:TAGGED_BY]->tag3;
我可以通过多种不同的方式找到被“T1”或“T2”标记的项目(返回item1,item2,item3),但似乎无法为所有标记的项目提出查询通过两个“T1”和“T2”(仅返回item1)。
任何帮助都将不胜感激 - 谢谢。
答案 0 :(得分:1)
您正在寻找的查询是
MATCH (n:Item)-[:TAGGED_BY]->(Tag{text:"T2"})
WITH n
MATCH (n)-[:TAGGED_BY]->(Tag{text:"T2"})
RETURN n;
答案 1 :(得分:0)
你也可以这样做:
MATCH (n:Item)-[:TAGGED_BY]->(t:Tag)
WHERE t.text IN ['T1','T2','T3','T4']
WITH n, count(*) as tags
WHERE tags = 4
RETURN n
带参数
MATCH (n:Item)-[:TAGGED_BY]->(t:Tag)
WHERE t.text IN {tags}
WITH n, count(*) as tags
WHERE tags = length({tags})
RETURN n