|
I have this query:
var cursor = groupCollection
|
.Find(
|
teamsQueryBuilder.ElemMatch(g => g.Teams, teamQueryBuilder.Eq(t => t.TeamId, teamId))
|
);
|
|
cursor.Options.Modifiers = new BsonDocument("$explain", true);
|
var result = cursor.Project(new BsonDocument()).FirstOrDefault();
|
So, I created an index like this:
groupCollection.Indexes
|
.CreateOne(Builders<Group>.IndexKeys
|
.Ascending(g => g.Teams[-1].TeamId));
|
{
|
"v" : 1,
|
"name" : "teams.$.teamId_1",
|
"key" : {
|
"teams.$.teamId" : 1
|
},
|
"ns" : "spochdb_dev.organization.teamgroups"
|
}
|
When I ran the query, I got the following explain:
{
|
"cursor" : "BasicCursor",
|
"isMultiKey" : false,
|
"n" : 1,
|
"nscannedObjects" : 1,
|
"nscanned" : 1,
|
"nscannedObjectsAllPlans" : 1,
|
"nscannedAllPlans" : 1,
|
"scanAndOrder" : false,
|
"indexOnly" : false,
|
"nYields" : 0,
|
"nChunkSkips" : 0,
|
"millis" : 0,
|
"indexBounds" : {},
|
"allPlans" : [{
|
"cursor" : "BasicCursor",
|
"n" : 1,
|
"nscannedObjects" : 1,
|
"nscanned" : 1,
|
"indexBounds" : {}
|
}
|
],
|
"server" : "DESKTOP-J8M6V6N:27017"
|
}
|
But, if I change the index creation code to this:
groupCollection.Indexes
|
.CreateOne(Builders<Group>.IndexKeys
|
.Ascending("teams.teamId"));
|
{
|
"v" : 1,
|
"name" : "teams.teamId_1",
|
"key" : {
|
"teams.teamId" : 1
|
},
|
"ns" : "spochdb_dev.organization.teamgroups"
|
}
|
and run the query again, I get the following explain:
{ {
|
"cursor" : "BtreeCursor teams.teamId_1",
|
"isMultiKey" : true,
|
"n" : 1,
|
"nscannedObjects" : 1,
|
"nscanned" : 1,
|
"nscannedObjectsAllPlans" : 1,
|
"nscannedAllPlans" : 1,
|
"scanAndOrder" : false,
|
"indexOnly" : false,
|
"nYields" : 0,
|
"nChunkSkips" : 0,
|
"millis" : 0,
|
"indexBounds" : {
|
"teams.teamId" : [[ObjectId("5881760396839d0e94fdf5a5"), ObjectId("5881760396839d0e94fdf5a5")]]
|
},
|
"allPlans" : [{
|
"cursor" : "BtreeCursor teams.teamId_1",
|
"n" : 1,
|
"nscannedObjects" : 1,
|
"nscanned" : 1,
|
"indexBounds" : {
|
"teams.teamId" : [[ObjectId("5881760396839d0e94fdf5a5"), ObjectId("5881760396839d0e94fdf5a5")]]
|
}
|
}
|
],
|
"oldPlan" : {
|
"cursor" : "BtreeCursor teams.teamId_1",
|
"indexBounds" : {
|
"teams.teamId" : [[ObjectId("5881760396839d0e94fdf5a5"), ObjectId("5881760396839d0e94fdf5a5")]]
|
}
|
},
|
"server" : "DESKTOP-J8M6V6N:27017"
|
}
|
}
|
We're using databse version v2.4.14 (git version 05bebf9ab15511a71bfbded684bb226014c0a553) at the moment, if that makes a difference.
If it doesn't make a difference, why is the driver generating unusable indexes?
|