Neo4j 对与给定集合中所有其他节点都出现的其他节点相关的节点的密码查询
我有一个基于标记事物概念的域,该域建模如下:Neo4j 对与给定集合中所有其他节点都出现的其他节点相关的节点的密码查询,neo4j,cypher,Neo4j,Cypher,我有一个基于标记事物概念的域,该域建模如下: (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 {
(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;
我可以通过多种不同的方式(返回item1、item2、item3)找到标记为“T1”或“T2”的项目,但似乎无法查询所有标记为“T1”和“T2”的项目(仅返回item1)
任何帮助都将不胜感激-谢谢。您需要的查询如下
MATCH (n:Item)-[:TAGGED_BY]->(Tag{text:"T2"})
WITH n
MATCH (n)-[:TAGGED_BY]->(Tag{text:"T2"})
RETURN n;
您还可以执行以下操作:
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
非常感谢你-现在我明白了,这很有道理!接下来,如果两个标记节点[T1,T2]是上游匹配的结果,而不是给定的文本集合,该怎么办?我早些时候接受了Ankit Ladhania的答案,因为它在技术上是正确的,但后来接受了这个答案,因为它更灵活,并且是我最终在代码中使用的答案。我越来越喜欢neo4j和Cypher。