4

ts.t を指定してエントリを見つけることができません (ts はタイムスタンプ型です)

oplog を掘り下げて、1 秒間にいくつの操作があるかを調べたいと思います。

タイムスタンプ フィールドを指定してエントリを見つけることができません。他のフィールドで問題ありません。$ mongo シェルの場合:

> db.oplog.rs.findOne()
{
    "ts" : {
        "t" : 1335200998000,
        "i" : 540
    },
    "h" : NumberLong("4405509386688070776"),
    "op" : "i",
    "ns" : "new_insert",
    "o" : {
        "_id" : ObjectId("4f958fad55ba26db6a000a8b"),
        "username" : "go9090",
        "message" : "hello, test.",
    }
}
> db.oplog.rs.find().count()
419583
> db.oplog.rs.test.find({"ts.t":1335200998000}).count()
0
> db.oplog.rs.test.find({"ts.t":/^1335200998/}).count()
0
> db.oplog.rs.test.find({ts:{ "t" : 1335200998000, "i" : 540 }}).count()
0
4

2 に答える 2

7

ts フィールドは実際にはTimestampフィールドであると思います。コンソールは単純化しようとします (これは非常に誤解を招きます)。次のようなクエリを実行すると、動作するはずです。

db.oplog.rs.find({ ts: Timestamp(1335200998000, 540)});

通常どおり $gte と $lte を使用できます。

db.oplog.rs.find({ ts: {$gte: Timestamp(1335100998000, 1)}});
db.oplog.rs.find({ ts: {$lte: Timestamp(1335900998000, 1)}});

2 番目の引数は、指定された秒内の操作の増分序数です。

于 2012-04-28T08:57:06.970 に答える
1

「.test」を使用してはいけませんが、単に使用しています。以下の作品:

db.oplog.rs.find( {'ts.t': 1335200998000 } );
于 2012-04-28T09:22:04.320 に答える