Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 更正大型查询的mongo索引_Mongodb_Mongoose - Fatal编程技术网

Mongodb 更正大型查询的mongo索引

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

我使用的是mongoose,其模式与此类似:

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
添加到这些索引中可能没有用处

但与往常一样,请验证使用的任何索引方法,以确保您的查询能够使用您创建的索引