gpt4 book ai didi

java - mongodb聚合长于不同

转载 作者:行者123 更新时间:2023-11-29 04:46:04 24 4
gpt4 key购买 nike

这是我目前如何使用 MongoDB 聚合框架进行区分:

db.big.aggregate([ { "$project" : { "first_name" : "$first_name"}} , { "$group" : { "_id" : { "col1" : "$first_name"}}} , { "$limit" : 50000}])

对于包含略多于 2M 文档的集合,它大约需要 3 秒。如果我运行以下查询

db.big.distinct('first_name')

我在不到 1 秒的时间内得到了几乎相同的结果。我对 distinct 的问题是我不能限制它,所以如果一个集合有 1M 个不同的属性值,所有的东西都将被返回。有没有一种方法可以使用 distinct,因为它性能更高,但对返回的元素数量也有限制。我使用的是 MongoDB Java 驱动程序,因此我需要一个适用于它的解决方案。

最佳答案

首先,目前无法使用 limit with distinct,如 jira task 所示。 .

其次,独特的性能将始终击败等效的聚合框架。分桶/分组总是比检查不同的值更重的操作。

有了这个,只有一种方法可以加速聚合框架分组阶段,如explained originally here by Asya Kamsky .也就是说,在对排序键 ( the $sort in the aggregation framework will use the index) 进行分组和索引之前,先按分组键对文档进行排序。

db.big.ensureIndex({ first_name: 1 }, {background:false})

db.big.aggregate([
{"$sort": { "first_name": 1 }},
{"$project": {
"first_name" : "$first_name"
}},
{ "$group": {
"_id" : "$first_name"
}},
{ "$limit" : 50000}
])

关于java - mongodb聚合长于不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37113180/

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