私は数時間からのインデックス作成の奇妙な動作と闘っています。私はサンプルデータを再構築しようとしていますので、新しいデータを挿入する前にコレクションを削除し、新しいデータを挿入する前にインデックスを作成し直してください。その後MongoDb EnsureIndexルックスにバグがあります
db.GetCollection("Posts").EnsureIndex("Name","Title","Owner");
私は、ソートされたクエリを実行しようとしていますが、MongoDBは、例外をスローし、
QueryFailureフラグが(ソートのためにあまりにも多くのデータだったと言います)がないインデックスを持ちます。インデックスを追加するか、より小さい制限を指定する
しかし、この行コードを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" }
シェルで再現します。それがうまくいくか、あなたが使用しているドライバに問題があるかのいずれかである場合。 –