mongodb - 使用某些条目中缺少的管道和字段时,Mongo 查找非常慢
问题描述
下面的查询非常快
[{
$match: {
"deleted": {"$ne": true},
"userId": {$exists: false}
}
}, {
$limit: 300
}, {
$lookup: {
from: 'users',
localField: 'userId',
foreignField: '_id',
as: 'user'
}
}, {
$count: 'count'
}]
但是这个很慢,在我的情况下,我明白了
$cursor 阶段 :: 错误由 :: 操作超过时间限制引起
300,但适用于少数人
[
{$match: {
"deleted": {"$ne": true},
"userId": {$exists: false}
}},
{$limit: 300},
{$lookup: {
"from": "users",
"let": {
"userId": "$userId"
},
"pipeline": [{
"$match": {
"$expr": {
"$eq": ["$_id", "$$userId"]
}
},
}],
"as": "user"
}},
{$count: 'count'}
]
我使用 "userId": {$exists: false} 只是为了证明 userId 在大多数情况下通常存在多慢,但有时它不存在,并且对于可能为 50% 的情况,查询非常慢。
我已经尝试过稀疏索引并且我在 mongo 4.2 上。不确定,但这在最新的 mongo 上可能不会那么慢。
关于如何提高查询速度的任何想法?
谢谢
注意:这不是完整的查询,我有另一个联接和一些项目,否则我会使用第一个版本。
解决方案
推荐阅读
- c - 如何在运行时读取共享库数据段开头的绝对加载地址?
- python - 暂停 selenium 脚本,直到我按下键盘上的 Enter
- firebase - 我的颤动应用程序中的 Firebase UserCredential 和 initializeApp 错误
- api - OSError:SavedModel 文件不存在于:model.01-0.42.h5/{saved_model.pbtxt|saved_model.pb}
- angular - 尝试在服务器上部署 Angular 11 时出现 304 错误
- r - 一组点 R 的 RMSD
- elasticsearch - 如何选择最佳的logstash 管道批量大小和延迟?(Logstash 6.4.3)
- apache-kafka - KSQL - 创建流全部为NULL
- webrtc - WebRTC addTrack / addStream 在 createOffer 之后
- python - 在数据框中的列中的某个位置添加字符串