如何使用Cypher获取与多个节点相关的节点,这些节点又与Neo4j中的多个节点相关
我是neo4j的新手,毫无疑问我很喜欢它 现在我的查询是,我有一个数据库,其中有访问过一个或多个URL的用户,这些URL包含一个或多个标记 现在我想要的是为访问了多个URL的特定用户检索标记 这种关系有点像这样: (:User)-[:visted]->(:URL)-[:CONTAINS]->(:Tag)如何使用Cypher获取与多个节点相关的节点,这些节点又与Neo4j中的多个节点相关,neo4j,cypher,graph-databases,Neo4j,Cypher,Graph Databases,我是neo4j的新手,毫无疑问我很喜欢它 现在我的查询是,我有一个数据库,其中有访问过一个或多个URL的用户,这些URL包含一个或多个标记 现在我想要的是为访问了多个URL的特定用户检索标记 这种关系有点像这样: (:User)-[:visted]->(:URL)-[:CONTAINS]->(:Tag) 现在我想检索访问过多个URL的用户以及所有这些URL中包含的所有标记。因此,基本上我需要用户访问过的所有标记,其中访问的URL不止一个。使用Cypher 2.X,这应该会使工作: MATCH (
现在我想检索访问过多个URL的用户以及所有这些URL中包含的所有标记。因此,基本上我需要用户访问过的所有标记,其中访问的URL不止一个。使用Cypher 2.X,这应该会使工作:
MATCH (user:User)
MATCH user-[:VISITED]->(url:URL)
WITH count(url) AS countUrl, url
WHERE countUrl > 1
MATCH url-[:CONTAINS]->(tag:Tag)
RETURN user.id, collect(tag) AS tags //you can show whatever you want here
您仍然可以优化Mik378提供的查询 事实上,在Cypher中,您可以使用size(pattern)子句复制java等价物
getDegree
:
当我尝试此查询“在此上下文(第3行第7列(偏移量:59))中无效使用聚合函数count(…)”,其中count(url)>1“我刚刚更新了查询;”时,出现了此错误事实上,我们必须使用
和
来处理聚合功能。先生,当我尝试此查询时,它被卡住了,没有返回任何结果,并且它正在运行,运行,运行\您可以复制/粘贴您的精确查询吗?匹配(用户:客户端)匹配用户-[:已访问]->(url:url)并将计数(url)作为countUrl,其中countUrl>1匹配url-[:包含]->(标记:标记)返回用户,收集(标记)作为标记
MATCH (n:User)-[:VISITED]->(url)<-[:TAGS]-(tag:Tag)
WHERE size((n)-[:VISITED]->()) > 1
RETURN n.email, collect(distinct tag.name) as tags
+------------------+---------------+------+--------+------------------------------------------+----------------------------------------------------+
| Operator | EstimatedRows | Rows | DbHits | Identifiers | Other |
+------------------+---------------+------+--------+------------------------------------------+----------------------------------------------------+
| EagerAggregation | 3 | 5 | 90 | n.email, tags | n.email |
| Projection | 7 | 24 | 48 | anon[15], anon[37], n, n.email, tag, url | n.email; tag |
| Filter(0) | 7 | 24 | 24 | anon[15], anon[37], n, tag, url | tag:Tag |
| Expand(All)(0) | 7 | 24 | 34 | anon[15], anon[37], n, tag, url | (url)<-[:TAGS]-(tag) |
| Filter(1) | 3 | 10 | 10 | anon[15], n, url | url:Url |
| Expand(All)(1) | 3 | 10 | 15 | anon[15], n, url | (n)-[:VISITED]->(url) |
| Filter(2) | 2 | 5 | 10 | n | GetDegree(n,Some(VISITED),OUTGOING) > { AUTOINT0} |
| NodeByLabelScan | 5 | 5 | 6 | n | :User |
+------------------+---------------+------+--------+------------------------------------------+----------------------------------------------------+
Total database accesses: 237
MATCH (n:User)-[:VISITED]->(url)-[:CONTAINS]->(tag:Tag)
WHERE size((n)-[:VISITED]->()) > 1
RETURN n.email, collect(distinct tag.name) as tags