Mongodb 更正大型查询的mongo索引
我使用的是mongoose,其模式与此类似:Mongodb 更正大型查询的mongo索引,mongodb,mongoose,Mongodb,Mongoose,我使用的是mongoose,其模式与此类似: var schema = new mongoose.Schema({ created: Date, fieldA: ObjectId, fieldB: ObjectId, fieldC: ObjectId, sortField: Number }); 这是一个很大的集合,所以我想确保索引是最优的。我使用以下内容建立了一个查询: var query = Schema.find({created: some-da
var schema = new mongoose.Schema({
created: Date,
fieldA: ObjectId,
fieldB: ObjectId,
fieldC: ObjectId,
sortField: Number
});
这是一个很大的集合,所以我想确保索引是最优的。我使用以下内容建立了一个查询:
var query = Schema.find({created: some-date-clause});
if ( some-condition )
query = query.or({fieldA: {$in: listOfSomeFieldAIDs}});
if ( some-other-condition )
query = query.or({fieldB: {$in: listOfSomeFieldBIDs}});
if ( yet-another-condition )
query = query.or({fieldC: {$in: listOfSomeFieldCIDs}});
query = query.sort({sortField:-1});
我想确保不管这个查询是什么,它都被完全覆盖了。我的直觉是创建一个跨越created、fieldA、fieldB、fieldC和sortField的索引。但是,我是否应该为只有第二个条件为真,或者第一个和第三个条件为真的情况创建几个索引?我是否应该以不同的方式处理这个问题?一个
$或查询的每个子句都是独立考虑的,因此最好创建三个单独的索引,每个fieldA
、fieldB
和fieldC
。见文件
排序发生在合并三个$或子句的结果之后,因此将sortField
添加到这些索引中可能没有用处
但与往常一样,请验证使用的任何索引方法,以确保您的查询能够使用您创建的索引