Я борюсь со странным поведением создания индекса из часов. Я пытаюсь пересоздать мои образцы данных, поэтому я удаляю свою коллекцию, прежде чем вставлять новые, и перед тем, как вставлять новые, я снова создаю индексы, как показано ниже.
db.GetCollection("Posts").EnsureIndex("Name","Title","Owner");
После этого я пытаюсь выполнить отсортированный запрос, но MongoDb выдает исключение и говорит, что
Флаг QueryFailure был слишком большим объемом данных для sort () без индекса. добавить индекс или указать меньший лимит
Но если я введу этот код строки db.GetCollection("Post").EnsureIndex("Name");
перед выполнением запроса, он будет работать без проблем. Тогда я понял, что если я использую это перед перестроением данных, это работает. Там должно быть ошибка в методе перегрузки или что-то я пропустил.
Я использую 10Gen .net драйвер версии 1.2 и проверил, какие индексы существуют перед выполнением запроса. Вот оно
db.GetCollection("Posts").EnsureIndex("Name","Title","Owner");
db.GetIndexes();//result
[0]: { "v" : 1, "key" : { "_id" : 1 }, "ns" : "Posts", "name" : "_id_" }
[1]: { "v" : 1, "key" : { "Name" : 1, "Title" : 1, "Owner" : 1 }, "ns" : "Posts", "name" : "Name_1_Title_1_Owner_1_" }
db.GetCollection("Posts").EnsureIndex("Title") // i call this for other indexes too
db.GetIndexes();
[0]: { "v" : 1, "key" : { "_id" : 1 }, "ns" : "Posts", "name" : "_id_" }
[1]: { "v" : 1, "key" : { "Name" : 1 }, "ns" : "Posts", "name" : "Name_1" }
[2]: { "v" : 1, "key" : { "Title" : 1 }, "ns" : "Posts", "name" : "Title_1" }
[4]: { "v" : 1, "key" : { "Owner" : 1 }, "ns" : "Posts", "name" : "Owner_1" }