|
given the following collection:
db.test.find().pretty()
|
{
|
"_id" : ObjectId("53fe2798a3cfa2769eb8ca96"),
|
"name" : "jon",
|
"a" : [
|
{
|
"someDate" : ISODate("2011-02-28T12:49:00Z")
|
},
|
{
|
"someDate" : ISODate("2011-03-31T11:56:00Z")
|
},
|
{
|
"someDate" : ISODate("2012-12-03T20:22:00Z")
|
}
|
]
|
}
|
and the following indexes:
db.test.getIndexes()
|
[
|
{
|
"v" : 1,
|
"key" : {
|
"_id" : 1
|
},
|
"ns" : "db.test",
|
"name" : "_id_"
|
},
|
{
|
"v" : 1,
|
"key" : {
|
"a.someDate" : 1
|
},
|
"ns" : "db.test",
|
"name" : "a.someDate_1"
|
}
|
]
|
here is the explain of the query:
db.test.find({'a' :{$elemMatch : {'someDate':{$gte:ISODate("2011-03-01T00:00:00"), $lte:ISODate("2011-05-01T00:00:00")}}}}).explain()
|
{
|
"cursor" : "BtreeCursor a.someDate_1",
|
"isMultiKey" : true,
|
"n" : 1,
|
"nscannedObjects" : 2,
|
"nscanned" : 2,
|
"nscannedObjectsAllPlans" : 2,
|
"nscannedAllPlans" : 2,
|
"scanAndOrder" : false,
|
"indexOnly" : false,
|
"nYields" : 0,
|
"nChunkSkips" : 0,
|
"millis" : 0,
|
"indexBounds" : {
|
"a.someDate" : [
|
[
|
ISODate("2011-03-01T00:00:00Z"),
|
ISODate("0NaN-NaN-NaNTNaN:NaN:NaNZ")
|
]
|
]
|
},
|
"server" : "local":27017"
|
}
|
1. the collection is being scanned twice
2. upper index bound is NaN
I would expect the index to be used for this range query with proper lower/upper bounds.
|