zoukankan      html  css  js  c++  java
  • 关于javascript:从mongodb id获取时间戳

    如何从MongoDB ID获取时间戳?

    时间戳记包含在mongoDB ID的前4个字节中(请参阅:http://www.mongodb.org/display/DOCS/Object+ID)。

    因此,您的时间戳是:

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

    1
    date new Date( parseInt( timestamp16 1000 )

    从Mongo 2.2开始,这种情况已经改变(请参阅:http://docs.mongodb.org/manual/core/object-id/)

    您可以在mongo shell内一步完成全部操作:

    1
    document._id.getTimestamp();

    这将返回一个Date对象。

    通过演练从mongoDB集合项获取时间戳:

    时间戳被埋在mongodb对象的肠子深处。跟随并保持霜冻。

    登录到mongodb shell

    1
    2
    3
    ubuntu@ip-10-0-1-223:~$ mongo 10.0.1.223
    MongoDB shell version: 2.4.9
    connecting to: 10.0.1.223/test

    通过插入项目创建数据库

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

    检查是否存在:

    1
    2
    3
    > show dbs
    local      0.078125GB
    penguins   0.203125GB

    让该数据库成为我们现在使用的数据库

    1
    2
    > use penguins
    switched to db penguins

    获取ISODate:

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

    打印一些json:

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

    获取行:

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

    我们只想检查一行

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

    获取该行的_id:

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

    从_id对象获取时间戳:

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

    获取最后添加的记录的时间戳:

    1
    2
    > 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)

    示例循环,打印字符串:

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

    示例循环与find()一样,打印行

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

    循环,获取系统日期:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    > 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")
    }

    循环,获取每一行的日期:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    > 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")
    }

    仅过滤日期

    1
    2
    3
    > 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")

    仅对字符串进一步过滤:

    1
    2
    3
    > 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)

    打印空日期,获取其类型,分配日期:

    1
    2
    3
    4
    5
    6
    > 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")

    将日期实例转换为yyyy-MM-dd

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

    每行以yyyy-MM-dd格式获取:

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

    toLocaleDateString比较简短:

    1
    2
    3
    > db.penguins.find().forEach(function (doc){ d = doc._id.getTimestamp(); print(d.toLocaleDateString()})
    Tuesday, December 232014
    Tuesday, December 232014

    以yyyy-MM-dd HH:mm:ss格式获取每一行:

    1
    2
    3
    > 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

    获取最后添加的行的日期:

    1
    2
    > 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)

    完成后删除数据库:

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

    确保它不存在:

    1
    2
    3
    > show dbs
    local   0.078125GB
    test    (empty)

    现在您的MongoDB是webscale。


    这是适合大家的快速php函数;)

    1
    2
    3
    4
    5
    6
    7
    8
    public static function makeDate($mongoId{

        $timestamp = intval(substr($mongoId08)16);

        $datum (new DateTime())->setTimestamp($timestamp);

        return $datum->format('d/m/Y');
    }

    在服务器端,使MongoDB ObjectId为_id

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

    并在客户端使用

    1
    2
    3
    var dateFromObjectId function (objectId{
    return new Date(parseInt(objectId.substring(08)161000);
    };
  • 相关阅读:
    Google快照查看八大绝招[小摘]
    CSS li或dd 浮动后增加图片时多出4PX问题
    ASP.NET C# 邮件发送全解
    ff ie7 ie6 css支持问题[拼网页标记]
    net 中 等同与ajax的效果 ICallbackEventHandler
    让DIV层位于flash对象之上
    屏蔽JS错误代码
    META标签的使用摘录,网页跳转特效
    【转】海量数据处理常用思路和方法
    MFC画图定时刷新,能否做到完全无闪烁
  • 原文地址:https://www.cnblogs.com/xibuhaohao/p/15099114.html
Copyright © 2011-2022 走看看