javascript - oid - objectid mongodb




Obteniendo la marca de tiempo de mongodb id (4)

¿Cómo obtengo la marca de tiempo de la id de MongoDB?


Obtenga la marca de tiempo de un elemento de colección mongoDB con tutorial:

La marca de tiempo está enterrada profundamente dentro de las entrañas del objeto mongodb. Sigue y mantente helado.

Iniciar sesión en mongodb shell

[email protected]:~$ mongo 10.0.1.223
MongoDB shell version: 2.4.9
connecting to: 10.0.1.223/test

Crea tu base de datos insertando elementos

> db.penguins.insert({"penguin": "skipper"})
> db.penguins.insert({"penguin": "kowalski"})
> 

Compruebe si está allí:

> show dbs
local      0.078125GB
penguins   0.203125GB

Hagamos de esa base de datos en la que estamos ahora

> use penguins
switched to db penguins

Consígase un ISODate:

> ISODate("2013-03-01")
ISODate("2013-03-01T00:00:00Z")

Imprime un json:

> printjson({"foo":"bar"})
{ "foo" : "bar" }

Recupera las filas:

> db.penguins.find()
{ "_id" : ObjectId("5498da1bf83a61f58ef6c6d5"), "penguin" : "skipper" }
{ "_id" : ObjectId("5498da28f83a61f58ef6c6d6"), "penguin" : "kowalski" }

Solo queremos inspeccionar una fila

> db.penguins.findOne()
{ "_id" : ObjectId("5498da1bf83a61f58ef6c6d5"), "penguin" : "skipper" }

Obtenga el _id de esa fila:

> db.penguins.findOne()._id
ObjectId("5498da1bf83a61f58ef6c6d5")

Obtenga la marca de tiempo del objeto _id:

> db.penguins.findOne()._id.getTimestamp()
ISODate("2014-12-23T02:57:31Z")

Obtenga la marca de tiempo del último registro agregado:

> db.penguins.find().sort({_id:-1}).limit(1).forEach(function (doc){ print(doc._id.getTimestamp()) })
Tue Dec 23 2014 03:04:53 GMT+0000 (UTC)

Ejemplo de bucle, cadenas de impresión:

> db.penguins.find().forEach(function (doc){ print("hi") })
hi
hi

Ejemplo de bucle, igual que find (), imprima las filas

> db.penguins.find().forEach(function (doc){ printjson(doc) })
{ "_id" : ObjectId("5498dbc9f83a61f58ef6c6d7"), "penguin" : "skipper" }
{ "_id" : ObjectId("5498dbd5f83a61f58ef6c6d8"), "penguin" : "kowalski" }

Loop, obtén la fecha del sistema:

> db.penguins.find().forEach(function (doc){ doc["timestamp_field"] = new Date(); printjson(doc); })
{
        "_id" : ObjectId("5498dbc9f83a61f58ef6c6d7"),
        "penguin" : "skipper",
        "timestamp_field" : ISODate("2014-12-23T03:15:56.257Z")
}
{
        "_id" : ObjectId("5498dbd5f83a61f58ef6c6d8"),
        "penguin" : "kowalski",
        "timestamp_field" : ISODate("2014-12-23T03:15:56.258Z")
}

Bucle, obtenga la fecha de cada fila:

> db.penguins.find().forEach(function (doc){ doc["timestamp_field"] = doc._id.getTimestamp(); printjson(doc); })
{
        "_id" : ObjectId("5498dbc9f83a61f58ef6c6d7"),
        "penguin" : "skipper",
        "timestamp_field" : ISODate("2014-12-23T03:04:41Z")
}
{
        "_id" : ObjectId("5498dbd5f83a61f58ef6c6d8"),
        "penguin" : "kowalski",
        "timestamp_field" : ISODate("2014-12-23T03:04:53Z")
}

Filtrar a solo las fechas

> db.penguins.find().forEach(function (doc){ doc["timestamp_field"] = doc._id.getTimestamp(); printjson(doc["timestamp_field"]); })
ISODate("2014-12-23T03:04:41Z")
ISODate("2014-12-23T03:04:53Z")

Filterdown aún más para las cadenas:

> db.penguins.find().forEach(function (doc){ doc["timestamp_field"] = doc._id.getTimestamp(); print(doc["timestamp_field"]) })
Tue Dec 23 2014 03:04:41 GMT+0000 (UTC)
Tue Dec 23 2014 03:04:53 GMT+0000 (UTC)

Imprima una fecha, obtenga su tipo, asigne una fecha:

> print(new Date())
Tue Dec 23 2014 03:30:49 GMT+0000 (UTC)
> typeof new Date()
object
> new Date("11/21/2012");
ISODate("2012-11-21T00:00:00Z")

Convertir instancia de fecha en aaaa-MM-dd

> print(d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate())
2014-1-1

obtenerlo en formato aaaa-MM-dd para cada fila:

> db.penguins.find().forEach(function (doc){ d = doc._id.getTimestamp(); print(d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate()) })
2014-12-23
2014-12-23

el toLocaleDateString es más breve:

> db.penguins.find().forEach(function (doc){ d = doc._id.getTimestamp(); print(d.toLocaleDateString()) })
Tuesday, December 23, 2014
Tuesday, December 23, 2014

Obtenga cada fila en formato aaaa-MM-dd HH: mm: ss:

> db.penguins.find().forEach(function (doc){ d = doc._id.getTimestamp(); print(d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate() + " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds()) })
2014-12-23 3:4:41
2014-12-23 3:4:53

Obtenga la fecha de la última fila agregada:

> db.penguins.find().sort({_id:-1}).limit(1).forEach(function (doc){ print(doc._id.getTimestamp()) })
Tue Dec 23 2014 03:04:53 GMT+0000 (UTC)

Suelta la base de datos cuando hayas terminado:

> use penguins
switched to db penguins
> db.dropDatabase()
{ "dropped" : "penguins", "ok" : 1 }

Asegúrate de que se haya ido:

> show dbs
local   0.078125GB
test    (empty)

Los alienígenas están llegando, solo tu dominio de MongoDB puede salvarnos.



En el lado del servidor, haga _id de MongoDB ObjectId

date = new Date( parseInt( _id.toString().substring(0,8), 16 ) * 1000 )

Y en el lado del cliente, use

var dateFromObjectId = function (objectId) {
return new Date(parseInt(objectId.substring(0, 8), 16) * 1000);
};

La marca de tiempo está contenida en los primeros 4 bytes de una id de mongoDB (ver: http://www.mongodb.org/display/DOCS/Object+IDs ).

Entonces tu fecha y hora es:

timestamp = _id.toString().substring(0,8)

y

date = new Date( parseInt( timestamp, 16 ) * 1000 )




mongodb