深究从MongoDB的ObjectId中获取时间信息

MongoDB默认使用_id字段作为主键,类型为ObjectId。ObjectId的生成有一定的规则,详情可以查看这篇文章 - MongoDB深究之ObjectId。如果你在写入数据库的时候忘记写入创建时间,不用担心,完全可以通过_id字段的值来还原当时的时间。看下面的mongodb script脚本:

db.getCollection('fees').find({}).forEach(function(item){
  var _str = item._id.toString().substr(10, 8);
  var _date = new Date(Number(parseInt(_str, 16).toString() + '000'));
  item.createTime = _date;
  db.fees.save(item);
})

  forEach可以遍历collection中的每一条数据,然后逐一进行修改。item._id.toString()会将整个ObjectId("...")当成一个字符串来处理,然后从第10个字符开始,取8个字符,得到的是这条数据创建时的时间戳(不带毫秒位数)。在后面补上毫秒位数”000“,然后用Date()方法构造成时间对象,赋值给createTime属性。

以上所述是小编给大家介绍的深究从MongoDB的ObjectId中获取时间信息,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • python将MongoDB里的ObjectId转换为时间戳的方法

    本文实例讲述了python将MongoDB里的ObjectId转换为时间戳的方法.分享给大家供大家参考.具体分析如下: MongoDB里的_id字段前四位是时间戳的16进制表示,通过Python可以很容易从_id中提取出时间戳来 def timestamp_from_objectid(objectid): result = 0 try: result = time.mktime(objectid.generation_time.timetuple()) except: pass return r

  • MongoDB中ObjectId的误区及引起的一系列问题

    近期对两个应用进行改造,在上线过程中出现一系列问题(其中一部分是由于ObjectId误区导致的) 先来了解下ObjectId: TimeStamp 前 4位是一个unix的时间戳,是一个int类别,我们将上面的例子中的objectid的前4位进行提取"4df2dcec",然后再将他们安装十六进制 专为十进制:"1307761900",这个数字就是一个时间戳,为了让效果更佳明显,我们将这个时间戳转换成我们习惯的时间格式(精确到秒) $ date -d '1970-01

  • 关于C#生成MongoDB中ObjectId的实现方法

    ObjectId介绍在MongoDB中,文档(document)在集合(collection)中的存储需要一个唯一的_id字段作为主键.这个_id默认使用ObjectId来定义,因为ObjectId定义的足够短小,并尽最大可能的保持唯一性,同时能被快速的生成. ObjectId 是一个 12 Bytes 的 BSON 类型,其包含:1.4 Bytes 自纪元时间开始的秒数2.3 Bytes 机器描述符3.2 Bytes 进程ID4.3 Bytes 随机数 从定义可以看出,在同一秒内,在不同的机器

  • java查询mongodb中的objectid示例

    找了很久查询objectid的方法都是错的,用mongovue能查询出来,但就是用java不知道怎么查询 1.mongovue里的查询方式: 复制代码 代码如下: {"_id" : ObjectId("5326bfc0e6f780b21635248f")} 2.纯mongodb里的查询方式: 复制代码 代码如下: db.collect.find({ "_id" : ObjectId("5326bfc0e6f780b21635248f&q

  • python根据时间生成mongodb的ObjectId的方法

    本文实例讲述了python根据时间生成mongodb的ObjectId的方法.分享给大家供大家参考.具体分析如下: mongodb的_id为ObjectId类型,ObjectId内是包含时间戳信息的,这样我们在保存数据的时候就不需要再单独记录一个添加时间了,如果需要按照时间查询,我们可以先把时间变化成可查询的ObjectId,再通过_id字段查询,由于mongodb的_id是主键,查询效率非常高.下面的函数给出了如何把时间换算成ObjectId,同时该函数还可以指定时间的偏移量,比如多少天前的时

  • 深究从MongoDB的ObjectId中获取时间信息

    MongoDB默认使用_id字段作为主键,类型为ObjectId.ObjectId的生成有一定的规则,详情可以查看这篇文章 - MongoDB深究之ObjectId.如果你在写入数据库的时候忘记写入创建时间,不用担心,完全可以通过_id字段的值来还原当时的时间.看下面的mongodb script脚本: db.getCollection('fees').find({}).forEach(function(item){ var _str = item._id.toString().substr(1

  • js中获取时间new Date()的全面介绍

    var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份(4位,1970-????) myDate.getMonth(); //获取当前月份(0-11,0代表1月) myDate.getDate(); //获取当前日(1-31) myDate.getDay(); //获取当前星期X(0-6,0代表星期天) 何问起 hovertree.com myDate.getTime(); /

  • Appium自动化测试中获取Toast信息操作

    目录 Toast简介 Toast 定位 启动参数配置 toast信息存在是否存在判断封装 toast信息内容获取 Toast简介 Toast是Android中用来显示显示信息的一种机制,和Dialog不一样的是,Toast是没有焦点的,而且Toast显示的时间有限,过一定的时间就会自动消失. Toast 定位 Appium 1.6.3开始支持识别Toast内容,主要是基于UiAutomator2,因此需要在Capablity配置参数 启动参数配置 desired_caps['automation

  • Vue 实现从文件中获取文本信息的方法详解

    本文实例讲述了Vue 实现从文件中获取文本信息的方法.分享给大家供大家参考,具体如下: 最近在使用vue做项目的时候,遇到一个需求,界面中需要显示大量的说明文字,为了保持界面的整洁和赶紧,决定采用单独的文件来存储显示信息,然后通过文件读取的方式显示到界面上. 刚开始我使用的是File和FileReader对象获取,但是比较气人的是这两个对象是IE浏览器特有的属性,chrome不支持,而且为了安全起见,现在浏览器是不推崇这种做法的,因为很容易造成文件被外部恶意删除或增加内容,安全性太低.无奈之下,

  • tensorflow 实现从checkpoint中获取graph信息

    代码: import tensorflow as tf sess = tf.Session() check_point_path = 'variables' saver = tf.train.import_meta_graph('variables/save_variables.ckpt.meta') saver.restore(sess, tf.train.latest_checkpoint(check_point_path)) graph = tf.get_default_graph() #

  • SpringSecurity从数据库中获取用户信息进行验证的案例详解

    基于 SpringBoot与SpringSecurity整合案例的修改: 数据库 user 表 注,密码是由 BCrypt 算法加密对应用户名所得. root $2a$10$uzHVooZlCWBkaGScKnpha.ZrK31NI89flKkSuTcKYjdc5ihTPtPyq blu $2a$10$mI0TRIcNF4mg34JmH6T1KeystzTWDzWFNL5LQmmlz.fHndcwYHZGe kaka $2a$10$/GMSSJ3AzeeBK3rBC4t8BOZ5zkfb38Il

  • JavaScript中获取时间的函数集

    下面给大家介绍下js获取时间的函数集. $(function(){ var mydate = new Date(); var t=mydate.toLocaleString(); $("#time").text(t); $("#time").load("Untitled-1.html"); }); 获取JavaScript 的时间使用内置的Date函数完成 var mydate = new Date(); mydate.getYear(); //

  • 完整删除ecshop中获取店铺信息的API

    使用的版本是ECShop_V2.7.3_UTF8_release1106,按以下步骤可完整去除其中获取店铺信息的API接口. 一. 删除获取店铺信息的API 1. admin/index.php 搜索 "elseif ($_REQUEST['act'] == 'main_api')" ,删除,源文件 489 - 539 行. 此段功能是官方获取ecshop版本.语种.发布时间.PHP版本.数据库版本.编码.订单数量.商品数量.用户数量以及店铺主题.样式名称.店铺URL.补丁信息的api

  • Python中获取对象信息的方法

    当我们拿到一个对象的引用时,如何知道这个对象是什么类型.有哪些方法呢? 使用type() 首先,我们来判断对象类型,使用type()函数: 基本类型都可以用type()判断: >>> type(123) <type 'int'> >>> type('str') <type 'str'> >>> type(None) <type 'NoneType'> 如果一个变量指向函数或者类,也可以用type()判断: >&

  • PHP中获取时间的下一周下个月的方法

    复制代码 代码如下: //通常用于定制服务的时候使用,比如包月会员,包年等等 //获取当前时间过一个月的时间,以DATETIME格式显示 date('Y-m-d H:i:s',strtotime('+1 month')) //获取当前时间过一个月的时间,以时间戳格式显示 strtotime(date('Y-m-d H:i:s',strtotime('+1 month'))) //以下是年,月,周,天,时,分秒的用法 date("Y-m-d H:i:s", strtotime("

随机推荐