如何找到 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)。
我在 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)。