我的 neo4j 数据库中有一个关系:
(r:RateableEntity)<-[t:TAG]-(h:HashTags)
Run Code Online (Sandbox Code Playgroud)
现在我想要一个返回包含以下内容的列表的查询:
hashtagName
数据库中的列表及其频率以及hashtagCount
与此主题标签相关的项目列表。
hashtagName
并hashtagItems
有id
标签。我接收输入参数的数量hashtag
和数量作为变量。hashtagItems
这是我从密码查询中期望的结果:
"hashtagList": [
{
"hashtagName": "hashtagName1",
"hashtagCount": number of times hashtag has been used in database,
"hashtagItems": [ list of relevant items for hashtagName1 ]
},
{
"hashtagName": "hashtagName2",
"hashtagCount": number of times hashtag has been used in database,
"hashtagItems": [ list of relevant items for hashtagName2 ]
},
...
]
Run Code Online (Sandbox Code Playgroud)
我写了这个密码:
MATCH p = (r:RateableEntity)<-[t:TAG]-(h:HashTag)
UNWIND TAIL (NODES(p)) AS hash
WITH COUNT(hash) as Count, h, hash
ORDER BY hash LIMIT 3
WHERE h.tag in hash.tag
MATCH (r:RateableEntity)<-[:TAG]-(h:HashTag)
RETURN DISTINCT h.tag, r.id, Count
LIMIT 3
Run Code Online (Sandbox Code Playgroud)
但它返回这个结果:
h.tag r.id Count
"vanessa" "cdd14968-404c-41e9-84d5-bf147030a023" 15
"vanessa" "b7e74f38-44e4-4b7f-b2c4-8301023ffa9b" 15
"vanessa" "2064d3e4-2995-4202-b178-bb2a6f230ab0" 15
Run Code Online (Sandbox Code Playgroud)
需要记住的一些事情:
密码运算符对每一行执行。
尽量不要将 UNWIND 视为循环结构。这一切所做的就是对行上的变量与列表的元素进行笛卡尔积。
因此,当您展开列表时,列表中的每个元素都会有一行,以及该行中已经存在的所有变量。然后,当发生针对每一行执行的后续操作(例如 MATCH 或 WITH)时,因此它看起来像一个循环结构,但实际上不是。
无论如何,这里不需要 UNWIND。对于两个节点匹配模式,tail(nodes(p))
将只是一个仅包含最后一个节点的单元素列表。它没有改变行数(因为列表大小为 1),并且不会在这里为您提供帮助。
这个查询应该效果更好:
MATCH (h:HashTag)
WITH h LIMIT 3 // best to limit early to avoid doing unnecessary work
WITH h, h.tag as hashtagName, size((h)-[:TAG]->()) as hashtagCount, [(h)-[:TAG]->(r:RateableEntity) | r.id] as hashtagItems
WITH h {hashtagName, hashtagCount, hashtagItems} as entry
RETURN collect(entry) as hashtagList
Run Code Online (Sandbox Code Playgroud)
编辑
如果您想要按大小排列前 3 个主题标签,则可以使用下面修改后的查询:
MATCH (h:HashTag)
WITH h, size((h)-[:TAG]->()) as hashtagCount
ORDER BY hashtagCount DESC
LIMIT 3
WITH h, hashtagCount, h.tag as hashtagName, [(h)-[:TAG]->(r:RateableEntity) | r.id] as hashtagItems
WITH h {hashtagName, hashtagCount, hashtagItems} as entry
RETURN collect(entry) as hashtagList
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9138 次 |
最近记录: |