MongoDb EnsureIndex выглядит ошибка - PullRequest
1 голос
/ 09 ноября 2011

Я борюсь со странным поведением создания индекса из часов. Я пытаюсь пересоздать мои образцы данных, поэтому я удаляю свою коллекцию, прежде чем вставлять новые, и перед тем, как вставлять новые, я снова создаю индексы, как показано ниже.

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" }

1 Ответ

1 голос
/ 10 ноября 2011

Я не могу точно сказать из вашего примера, что, по вашему мнению, не работает.

Следует иметь в виду, что EnsureIndex знает только то, что происходит внутри вашего собственного процесса. Так что если вы удаляете индекс или удаляете коллекцию, используя оболочку mongo, EnsureIndex не поймет этого. Вы можете использовать CreateIndex вместо EnsureIndex, если хотите убедиться, что индекс существует независимо от того, что другие процессы могли бы сделать за это время.

Дайте мне знать, если вы можете предоставить более подробную информацию о том, как воспроизвести то, что вы видите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...