Mongodb $或查询优化索引



我有一个查询。这个指数似乎不起作用。查询时间超过7秒

我的模型

const likeSchema = new Schema({
user: {type: ObjectId, ref: 'User'},
wind: {type: ObjectId, ref: 'Wind'},
windUser: {type: ObjectId, ref: 'User'},
comment: {type: ObjectId, ref: 'Comment'},
commentUser: {type: ObjectId, ref: 'User'},

type: {type: Number, default: 0},
read: {type: Boolean, default: false},
datetime: {type: Date, default: Date.now}
}, {strict: false})

likeSchema.index({windUser: 1, commentUser: 1 })

查询条件


let filter = { $or:[{ windUser: user }, { commentUser: user }] }

我的索引有问题吗?这或查询、索引建立正确吗?

如本文所述,您需要两个索引:

likeSchema.index({ windUser: 1 })
likeSchema.index({ commentUser: 1 })

数据库不能有效地使用单个复合索引来处理具有OR的查询。虽然您提到的复合索引将有助于过滤windUser字段,但它对commentUser本身并不是很有帮助。由于操作符是$or而不是$and,数据库不能同时组合这两个边界,因为它会错过结果。

Edit还值得一提的是,通过收集和查看explain输出,可以最好地理解这样的问题。您应该看到,在当前配置下,数据库选择执行集合扫描,而不是使用当前存在的复合索引。

最新更新