0

IdとOtherのような2つの基準を使用したクエリ中に、明確に問題が発生していません。id、iso、valueなどのデータを格納するリポジトリを使用しています。クエリを実行するためのindex( "_ id"、 "Iso")を作成しましたが、クエリは_idのような1つの基準のみを使用した場合にのみカーソルを返しますが、2つ(_id、Iso)を使用した場合は何も返しません(コメント付きコード) 。
インデックスが応答に影響を与えていますか、それともクエリメソッドが失敗していますか?
:v1.6.5とC#公式を使用してください。

サンプル。

//Getting Data
public List<BsonObject> Get_object(string ID, string Iso)
{
    using (var helper = BsonHelper.Create())
    {
        //helper.Db.Repository.EnsureIndex("_Id","Iso");
        var query = Query.EQ("_Id", ID);
        //if (!String.IsNullOrEmpty(Iso))
        //    query = Query.And(query, Query.EQ("Iso", Iso));
        var cursor = helper.Db.Repository.FindAs<BsonObject>(query);
        return cursor.ToList();
    }
}

データ:

{  
    "_id": "2345019",  
    "Iso": "UK",  
    "Data": "Some data"  
}

その後、Update.Set()メソッドを使用してデータを更新しました。MongoViewを使用して変更されたデータを確認できます。新しいデータは正しいですが、クエリは常に同じ古い値を返します。これらの値を確認するために、最終的にキャッシュできるページを使用しますが、最後にタイムスタンプを追加しても何も変更されない場合、ページは常に同じ古いデータを返します。コメントは大歓迎です、ありがとう。

4

1 に答える 1

0

C# ドライバーがどのようにインデックスを作成するかは覚えていませんが、インデックスを作成するためのシェル コマンドは次のようになります。

db.things.ensureIndex({j:1});

「真」と言っているような「1」に注目してください。

コードには次のものがあります。

helper.Db.Repository.EnsureIndex("_Id","Iso");

おそらく次のようになります。

helper.Db.Repository.EnsureIndex("_Id", 1);
helper.Db.Repository.EnsureIndex("Iso", 1);

また、「_Id」にインデックスを作成していて、実際の id フィールドが「_id」と呼ばれているという事実にも関連している可能性があります... MongoDB では大文字と小文字が区別されます。

インデックスのドキュメントをざっと見てみましょう: http://www.mongodb.org/display/DOCS/Indexes

于 2011-02-23T14:52:07.717 に答える