0

ローカルデータベースに「oplog.rs」という名前のコレクションがあり、タイムスタンプフィールドタイプの「ts」があります。データは次のように保存されます。

{ 
    "ts" : Timestamp(1374672101000, 1), 
    "h" : NumberLong(0), 
    "v" : 2, 
    "op" : "n",
    "ns" : "", 
    "o" : { "msg" : "initiating set" } 
}

C# ドライバーから Timestamp フィールドにクエリを実行するにはどうすればよいですか?

「opslog」コレクションのデータは次のとおりです。

{ "ts" : Timestamp(1375198013000, 1), "h" : NumberLong("-4582872941246748867"),"v" : 2, "op" : "i", "ns" : "audit.search", "o" : { ... } }
{ "ts" : Timestamp(1375198012000, 5), "h" : NumberLong("2189325868256500260"), "v" : 2, "op" : "i", "ns" : "audit.search", "o" : { ... } }
{ "ts" : Timestamp(1375198012000, 4), "h" :NumberLong("-4649577771618475915"),"v" : 2, "op" : "i", "ns" : "audit.search", "o" : { ...} }
{ "ts" : Timestamp(1375198012000, 3), "h" : NumberLong("9039523732738063755"), "v" : 2, "op" : "i", "ns" :"audit.search", "o" : { ... } }
{ "ts" : Timestamp(1375198012000, 2), "h" :NumberLong("8432711896209033544"), "v" : 2, "op" : "i", "ns" : "audit.search", "o" : { ... } }
{ "ts" : Timestamp(1375198012000, 1), "h" : NumberLong("8059694251326474562"), "v" : 2, "op" : "i", "ns" :"audit.search", "o" : { ... } }
{ "ts" : Timestamp(1375198011000, 5), "h" : NumberLong("8581369985048440971"), "v" : 2, "op" : "i", "ns" : "audit.search", "o" : { ... } }
{ "ts" : Timestamp(1375198011000, 4), "h" : NumberLong("-1142902968129950222"),"v" : 2, "op" : "i", "ns" :"audit.search", "o" : { ... } }
{ "ts" : Timestamp(1375198011000, 3), "h" : NumberLong("-4104381148312926566"),"v" : 2, "op" : "i", "ns" : "audit.search", "o" : { ... } }
{ "ts" : Timestamp(1375198011000, 2), "h" : NumberLong("-1413662537726747267"),"v" : 2, "op" : "i", "ns" : "audit.search", "o" : { ... } }
{ "ts" : Timestamp(1375198011000, 1), "h" :NumberLong("-1031425920752689991"),"v" : 2, "op" : "i", "ns" : "audit.search", "o" : { ... } }
{ "ts" : Timestamp(1375198010000, 1), "h" : NumberLong("12432179788117176"), "v" : 2, "op" : "i", "ns" :"audit.search", "o" : { ... } }

私は2つのクエリを持っています:

{ "ts" : { "$lte" : NumberLong("5906428099062398977") } }

{ "ts" : { "$gte" : NumberLong("5906428099062398977") } }

最初のクエリは結果を返しますが、2 番目のクエリは結果を返しません。「$gte」演算子が機能しないのはなぜですか?

4

1 に答える 1

3

BsonTimestampクラス ( docs )を使用する必要があります。

public class OpsLog {
    [BsonRepresentation(BsonType.ObjectId)]
    public string Id { get; set; }

    [BsonElement("ts")] // use the abbreviation in serialization
    public BsonTimestamp TimeStamp{ get; set; }
    // etc...
}

タイムスタンプを表す長い数値を渡すコンストラクターを使用してインスタンスを作成することにより、クエリを実行できます。

var query = Query.EQ("ts", new BsonTimeStamp(timestampValue));
var cursor = myCollection.FindAs<OpsLog>(query);
foreach(var log in cursor) {
    // etc...
}
于 2013-07-30T14:07:52.650 に答える