我有一个名为test
的MongoDB集合,其中包含以下两个简单文档:
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25
}
{
"first_name" : "James",
"last_name" : "Bond",
"age" : 31
}
我还为这个集合创建了以下索引:
{
"first_name" : 1
}
{
"last_name" : 1
}
{
"age" : 1
}
{
"first_name" : 1,
"last_name" : 1,
"age" : 1
}
以下查询使用其对应的字段索引:
db.getCollection('test').find({first_name: 'John'});
db.getCollection('test').find({last_name: 'Smith'});
db.getCollection('test').find({age: 25});
但是当我执行以下查询时:
db.getCollection('test').find({first_name: 'John', last_name: 'Smith', age: 25});
它使用字段last_name
的单个索引,而不是包含所有三个字段的复合索引。
http://www.binaryconvert.com/convert_signed_int.html?hexadecimal=0017A8A6
关于这个问题的任何想法/参考?
MongoDB版本:3.0.7
由于
答案 0 :(得分:2)
MongoDB
查询规划器决定哪个索引对于给定查询最有效(同样,从MongoDB 2.6开始,它可以获取多个索引)。 Query planner documentation详细解释了它。
如果您希望它为最后一个查询选择3键复合索引,您有两个选择:
hint()
。您需要将索引名称作为hint
方法的参数传递,您可以从collection.getIndexes()
命令输出中找到该参数。