database - 为什么我的 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 }
}
}
}
]
解决方案
索引您的数据可能是您的问题的解决方案。没有索引 mongodb 必须扫描所有文档。
推荐阅读
- prometheus - 是否可以更改 Kamon Prometheus 报告者公开指标的端点?
- python-3.x - scikit-learn 的 VotingClassifier 中使用的分类器是什么?
- python - python获取每个成员只出现一次的组合组
- excel - When a checkbox is checked the multiple textboxes become visible however I need a second activity
- json - 嵌套 JWS 和 JWE 令牌是否有任何标准顺序?
- php - MySQL Datediff - 有什么问题?
- javascript - 图像未填满整个区域
- git - 克隆和添加更改后镜像 git 存储库
- wso2 - Openid Connect Single Signout with Entitlement Mediator in Enterprise Integrator
- javascript - 如何使用对象的值更新数组?