首页 > 解决方案 > 为什么我的 MongoDB 聚合查询这么慢

问题描述

我有几个需要从数据库中获取的用户 ID(通常是 2 或 3 个)。问题是,我还需要知道到某个点的距离。问题是,我的集合中有 1,000,000 个文档(用户),获取用户需要 30 秒以上。

为什么会这样?当我只使用$in运算符时,_id它可以正常工作并在 200 毫秒内返回所有内容,而当我只使用$geoNear运算符时,它也可以正常工作,但是当我将 2 一起使用时,一切都会变慢。我该怎么办?同样,我需要的只是一些具有userIds数组中的 ID 及其与某个点 ( user.location) 的距离的用户。

编辑:还想提一下,当我使用$nin而不是$in查询时,它也能很好地执行。只有$in在与$geoNear

const user = await User.findById('logged in users id');
const userIds = ['id1', 'id2', 'id3'];

[
    {
        $geoNear: {
            near: user.location,
            distanceField: 'distance',
            query: {
                _id: { $in: userIds }
            }
        }
    }
]

标签: databasemongodbmongooseindexing

解决方案


索引您的数据可能是您的问题的解决方案。没有索引 mongodb 必须扫描所有文档。


推荐阅读