如何找到 ArangoDB 集合文档中出现次数最多的属性值?

How to find the most occurring attribute values count in documents of a ArangoDB collection?

我在 ArangoDB 中有一个集合,其中每个文档都包含一些属性,例如

{
    "contributor_name": "Rizano",
    "action": "create",
    "id": 3633,
    "type": "newusers",
    "logtitle": "What to do",
    "timestamp": "2006-07-05",
    "contributor_id": 7878
}

该集合包含数百万个文档。现在我想找出文档中出现次数最多的 contributor_name 及其计数。

您可以简单地按 contributor_name 分组并使用特殊的 COLLECT 语法变体 WITH COUNT INTO ... 来有效计算每个值在数据集中出现的频率:

FOR doc IN coll
  COLLECT name = doc.contributor_name WITH COUNT INTO count
  RETURN { name, count }

结果可能如下所示:

[
  { "name": "Rizano", "count": 5 },
  { "name": "Felipe", "count": 8 },
  ...
]

如果您喜欢这种格式,您可以像这样将结果合并在一起:

[
  {
    "Rizano": 5,
    "Felipe": 8
  }
  ...
]

查询:

RETURN MERGE(
  FOR doc IN coll
    COLLECT name = doc.contributor_name WITH COUNT INTO count
    RETURN { [name]: count }
)

您还可以按计数排序并将结果限制为出现次数最多的值,例如像这样(仅限顶级贡献者):

FOR doc IN coll
  COLLECT name = doc.contributor_name WITH COUNT INTO count
  SORT count DESC
  LIMIT 1
  RETURN { name, count }

还有 COLLECT AGGREGATE,尽管这个特定查询的性能应该没有差异:

FOR doc IN coll
  COLLECT name = doc.contributor_name AGGREGATE count = LENGTH(1)
  SORT count DESC
  LIMIT 1
  RETURN { name, count }

传递给 LENGTH 的值并不重要,我们想要的只是它 returns 长度为 1(因此给定贡献者的计数器增加 1)。