【发布时间】:2017-11-15 02:31:48
【问题描述】:
我对每个线程都有一个评论模型,
const CommentSchema = new mongoose.Schema({
author: { type: ObjectID, required: true, ref: 'User' },
thread: { type: ObjectID, required: true, ref: 'Thread' },
parent: { type: ObjectID, required: true, ref: 'Comment' },
text: { type: String, required: true },
}, {
timestamps: true,
});
除了通过_id进行单个查询外,我想通过这种方式查询数据库:
范围查询
const query = {
thread: req.query.threadID,
_id: { $gt: req.query.startFrom }
};
CommentModel.find(query).limit(req.query.limit);
我的目的是找到与线程相关的 cmets,然后获取部分结果。看来此查询按预期工作。我的问题是:
这是满足我要求的正确方法吗?
如何正确索引字段?这是一个复合索引还是我需要单独索引每个字段?我检查了
explain()的结果,似乎只要其中一个查询字段包含索引,inputStage.stage将始终有IXSCAN而不是COLLSCAN?这是检查查询性能的关键信息吗?是不是每次需要根据一个字段进行查找,都需要为这些字段做一个索引?假设我要搜索作者发布到特定线程的所有 cmets。
这样的代码:
const query = {
thread: req.query.threadID,
author: req.query.authorID,
};
我是否需要为此要求创建复合索引?
【问题讨论】: