Je suis en train de lutter contre le comportement étrange de la création d'index depuis des heures. J'essaye de reconstruire mes données d'échantillon ainsi je baisse ma collection avant d'insérer de nouvelles données et avant d'insérer de nouvelles données je crée des index encore comme ci-dessous.MongoDb EnsureIndex semble avoir un bug
db.GetCollection("Posts").EnsureIndex("Name","Title","Owner");
Après que je cherche à exécuter la requête mais MongoDB triée throws Exception et dit que
drapeau QueryFailure était trop de données pour le tri() sans index. ajoutez un index ou spécifiez une plus petite limite
Mais si je mets ce code de ligne db.GetCollection("Post").EnsureIndex("Name");
avant d'exécuter la requête, cela fonctionne sans problème. Ensuite, j'ai réalisé que si je l'utilise avant de reconstruire les données cela fonctionne. Il devrait y avoir un bug dans la méthode de surcharge ou quelque chose que j'ai raté. J'utilise la version 1.2 du pilote 10Gen .net et j'ai vérifié quels index existent avant la requête d'exécution. Ici, il est
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" }
Reproduire dans la coquille. Si cela fonctionne, vous faites quelque chose de mal ou le pilote que vous utilisez a des problèmes. –