javascript - new - Obteniendo la marca de tiempo de mongodb id
mongoose objectid to string (5)
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
ubuntu@ip-10-0-1-223:~$ 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.
¿Cómo obtengo la marca de tiempo de la id de MongoDB?
A partir de Mongo 2.2, esto ha cambiado (ver: http://docs.mongodb.org/manual/core/object-id/ )
Puedes hacerlo todo en un solo paso dentro de la carcasa de mongo:
document._id.getTimestamp();
Esto devolverá un objeto Date.
Aquí hay una función php rápida para todos ustedes;)
public static function makeDate($mongoId) {
$timestamp = intval(substr($mongoId, 0, 8), 16);
$datum = (new DateTime())->setTimestamp($timestamp);
return $datum->format(''d/m/Y'');
}
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 )