我正在尝试针对以下用例进行优化。我想检索其数组字段是查询数组的子集的所有文档。
例如子集(['a','b','c'])=> [{arr:['a','b']},{arr:['c']},{arr:['a' ,'b','c']}]
到目前为止,查询$ not:{$ elemMatch:{$ nin:[arr]}}已使我实现了预期的行为。但是,此查询未使用我选择的数组字段上的索引,因此每次都会进行完整的集合扫描。我进行了一些研究,显然$ elemMatch之前带有$ not导致未使用索引。还有其他方法可以重现我的查询,使其使用索引吗?目前,该查询在处理100万个文档时几乎需要一秒钟的时间。
答案 0 :(得分:0)
为什么$ nin不与$ n一起使用? $或[$与{$ exists:false}一起使用]是否足够?
能否提供您的索引和查询的执行状态? 例如db..find({})。explain('executionStats')