sql >> Database teknologi >  >> NoSQL >> MongoDB

mongoDB. læs, søg tidsstempel baseret på oplog

Timestamp værdier, du ser i oploggen, er en intern MongoDB BSON-type. Det første argument es i repræsentationen som en funktion Timestamp(es, ord) er en time_t værdien af ​​sekunder siden Unix-epoken. Den anden er en ordinal, der bestiller tidsstempler inden for et sekund. Du bør være i stand til at forespørge Timestamp er normalt med $gt , $lt osv.:

> 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) }

For at besvare dine specifikke spørgsmål (i mongo-skallen),

> 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) } })

Du har ikke angivet en tidszone - sørg for at være forsigtig med det og tag det rigtige valg.

> 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. mongo bruger mongoose i node ønsker at bruge eller og i forespørgsel

  2. Hvordan udtrækker man forskellige værdier fra en mongo-database ved hjælp af Waterline og Sails.js (version 0.10)?

  3. Sådan får du rørledningsobjektet i Scrapy spider

  4. MongoDB:hvordan tæller man antallet af nøgler i et dokument?