sql >> データベース >  >> NoSQL >> MongoDB

mongoDB。読み取り、oplogに基づいてタイムスタンプを検索

    Timestamp oplogに表示される値は、内部のMongoDBBSONタイプです。最初の引数es 関数としての表現Timestamp(es, ord) time_tです Unixエポックからの秒の値。 2つ目は、1秒以内にタイムスタンプを並べ替える序数です。 Timestampをクエリできるはずです 通常、$gtを使用します 、$lt 、など:

    > db.ts.find()
    { "_id" : ObjectId("53eb914ff9b63e0dd3ca1a20"), "ts" : Timestamp(1406185666, 1) }
    { "_id" : ObjectId("53eb915cf9b63e0dd3ca1a21"), "ts" : Timestamp(1405914581, 1) }
    { "_id" : ObjectId("53eb917cf9b63e0dd3ca1a22"), "ts" : Timestamp(1406185666, 2) }
    
    > db.ts.find({ "ts" : { "$gte" : Timestamp(1406185630, 1) } })
    { "_id" : ObjectId("53eb914ff9b63e0dd3ca1a20"), "ts" : Timestamp(1406185666, 1) }
    { "_id" : ObjectId("53eb917cf9b63e0dd3ca1a22"), "ts" : Timestamp(1406185666, 2) }
    
    > db.ts.find({ "ts" : { "$gt" : Timestamp(1406185666, 1) } })
    { "_id" : ObjectId("53eb917cf9b63e0dd3ca1a22"), "ts" : Timestamp(1406185666, 2) }
    

    (mongoシェルで)特定の質問に答えるには、

    > var SECS_PER_HOUR = 3600
    > var now = Math.floor((new Date().getTime()) / 1000) // seconds since epoch right now
    > db.oplog.rs.find({ "ts" : { "$lt" : Timestamp(now, 1), "$gt" : Timestamp(now - SECS_PER_HOUR, 1) } })
    

    タイムゾーンを指定していません。タイムゾーンに注意し、正しい選択をしてください。

    > var since = Math.floor(ISODate("2014-08-12T09:00:00.000Z").getTime() / 1000)
    > var until = Math.floor(ISODate("2014-08-12T15:00:00.000Z").getTime() / 1000)
    > db.oplog.rs.find({ "ts" : { "$lt" : Timestamp(until, 1), "$gt" : Timestamp(since, 1) } })
    



    1. created_atフィールドとupdated_atフィールドをマングーススキーマに追加します

    2. MongoDBデータベースプロファイラーの概要

    3. NodeJS + Mongo-コレクションのコンテンツを取得する方法は?

    4. 一意のIDを持つ配列内のアイテムを更新しています