gpt4 book ai didi

neo4j - 在 cypher、UNWIND 或 FOREACH 中循环 (Neo4j)

转载 作者:行者123 更新时间:2023-12-02 00:26:10 26 4
gpt4 key购买 nike

我的 neo4j 数据库中有一个关系:

(r:RateableEntity)<-[t:TAG]-(h:HashTags)

现在我想要一个返回列表的查询,该列表包括:

  1. hashtagName 列表及其在数据库中作为 hashtagCount 的频率以及与此主题标签相关的项目列表。hashtagNamehashtagItemsid 标签。

我从输入参数中接收 hashtaghashtagItems 的数量作为变量。

这是我对密码查询的预期结果:

"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 ]
},
...
]

我写了这个密码:

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

但它返回的是这个结果:

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

最佳答案

注意事项:

  1. 密码运算符对每一行执行。

  2. 尽量不要将 UNWIND 视为循环结构。所有这些所做的就是对一行中的变量与列表的元素进行笛卡尔积。

因此,当您 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

编辑

如果您想要按大小排在前 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

关于neo4j - 在 cypher、UNWIND 或 FOREACH 中循环 (Neo4j),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53714738/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com