我想在Arango查询语言中编写一个最有效的查询,就像加入计数一样。
在数据库中,我有用户,标记和 userTag 集合。 用户和标记通过 userTag 中存储的“边缘”连接。 我想列出所有标记(包含来自Tags集合的数据)和每个标记 - 连接到Tag的用户数。
我拥有的(它有效):
FOR tag in tags
let forOneTag = (
FOR v, e, p IN 1 OUTBOUND tag
ANY userTag
RETURN {e}
)
RETURN {tag: tag.tagname, numberOfUsers: LENGTH(forOneTag)}
我觉得这不是关于时间和记忆的最有效方式。 是否有更“'arangoic'的方式呢?
答案 0 :(得分:3)
您的查询已经很好了。一个小优化:使用RETURN e
代替RETURN {e}
,您不必将e
包含在文档中,因为它已经是文档。
FOR tag in tags
let forOneTag = (
FOR v, e, p IN 1 OUTBOUND tag
ANY userTag
RETURN e
)
RETURN {tag: tag.tagname, numberOfUsers: LENGTH(forOneTag)}
或者,您可以使用以下查询。这些查询性能更高,但只返回至少有一个连接用户的标记。
FOR tag in tags
FOR v, e, p IN 1 OUTBOUND tag
ANY userTag
RETURN {tag: tag.tagname, numberOfUsers:LENGTH(p.edges)}