我的数据库中有以下对象结构。
{
"_id": 1234,
"dateTime": ISODate("2015-09-28T02:15:00Z"),
"tags":[{
"_id": 5678,
"name":{
"short": "GOT",
"long" : "Game of Thrones"
}
},{
"_id": 9101,
"name":{
"short": "Dragons",
"long" : "Huge Dragons"
}
}]
}
我正在尝试使用:
进行查询db.collection.find({ dateTime:{$ gte:new Date(1443398000000),$ lt:new Date(1443484740000)}, " tags._id":" d8408d19-48e4-36a0-aa23-55cd8c8415f6"}})
我创建了索引:
{dateTime:1," tags._id":1}
然而,当使用explain()运行查询时,它从不使用此索引。
我尝试反过来翻转索引并重新排序我的查询,但这没有帮助。
我的数据库中有大约500,000个文档。
希望有人可以提供帮助。
答案 0 :(得分:0)
我只是这样查询
> db.comp.find({dateTime:{"$gte":new Date(12345),"$lte":new Date(999999999)},"ta
gs._id":5678}).explain()
这是输出
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "test.comp",
"indexFilterSet" : false,
"parsedQuery" : {
"$and" : [
{
"tags._id" : {
"$eq" : 5678
}
},
{
"dateTime" : {
"$lte" : ISODate("1970-01-12T13:
46:39.999Z")
}
},
{
"dateTime" : {
"$gte" : ISODate("1970-01-01T00:
00:12.345Z")
}
}
]
},
"winningPlan" : {
"stage" : "KEEP_MUTATIONS",
"inputStage" : {
"stage" : "FETCH",
"filter" : {
"dateTime" : {
"$gte" : ISODate("1970-01-01T00:
00:12.345Z")
}
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"dateTime" : 1,
"tags._id" : 1
},
"indexName" : "dateTime_1_tags._id_1",
"isMultiKey" : true,
"direction" : "forward",
"indexBounds" : {
"dateTime" : [
"(true, new Date(9999999
99)]"
],
"tags._id" : [
"[5678.0, 5678.0]"
]
}
}
如果您看到使用了"indexName" : "dateTime_1_tags._id_1"
索引。
希望它会有所帮助