我有一个遵循这个“模式”的集合:
{
_id: ObjectId,
order: Number,
fieldA: ObjectId,
fieldB: Array[ObjectId]
}
和这样定义的索引:
{
fieldA: 1,
fieldB: 1,
order: 1
}
运行这样的查找查询时:
{
$and: [
{fieldA: {$in: [{"$oid":"592edae196232608d00f78f5"},{"$oid":"592edadc96232608d00f5614"}]}},
{fieldB: {$in:[{"$oid":"592edace96232608d00ef77f"},{"$oid":"592edacd96232608d00ef34b"}]}}
]
}
sort
定义为
{
order: 1
}
查询运行良好,索引覆盖查询,解释计划向我显示:
- 4 次 IXSCAN
- 1 SORT_MERGE
- 1 取数
问题:如果我查询fieldA
和/或fieldB
使用巨大 $in
的(我正在尝试进行连接之类的操作),则索引的作用不同,查询不被覆盖,排序是在内存中进行的,并且解释计划显示我 :
- 1 IXSCAN
- 1 取数
- 1 SORT_KEY_GENERATOR
- 1 排序
更糟糕的是,如果我从 Mongoose 运行此查询,排序操作会耗尽内存:/