我有以下查询:
db.pmusers.aggregate([
{
$unwind: '$preferableUsersIds'
},
{
$group:{_id: '$preferableUsersIds', number:{$sum: 1}}
},
{
$sort:{number:-1}
},
{
$limit:1
}
])
我知道这不是最佳解决方案,因为我对所有条目进行排序而不是只找到一条。
mongoDb是否支持以更有效的方式重写它?
我知道$max但是看不出它对我有什么帮助。
这个至少不会更快起作用:
db.pmusers.aggregate([
{
$unwind: '$preferableUsersIds'
},
{
$sortByCount: "$preferableUsersIds"
},
{
$limit:1
}
])
答案 0 :(得分:0)
请参阅answer here
MongoDB合并聚合中的排序和限制以优化查询。如果您经常这样做以确保它是一个涵盖的查询,您也可以添加索引。
来自链接答案的文字:
当$ sort紧接在$ limit之前时,优化器可以合并 $ sort的$ limit。这仅允许排序操作 随着它的进展保持前n个结果,其中n是指定的 限制,MongoDB只需要在内存中存储n个项目。