计算Arango

时间:2017-07-25 13:58:26

标签: count arangodb nosql

我想在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'的方式呢?

1 个答案:

答案 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)}