• MongoDB ObjectId


    概述

    > db.col.find()
    { "_id" : ObjectId("56c56dd4ca446fab71e4c38a"), "x" : 1, "y" : 3 }
    { "_id" : ObjectId("56c572c2ca446fab71e4c38b"), "x" : 2, "y" : 2 }
    { "_id" : ObjectId("56c572c8ca446fab71e4c38c"), "x" : 3, "y" : 1 }
    { "_id" : ObjectId("56c5a7beb708aa3d13c61cc7"), "c" : 3, "m" : 1 }

    每个文档中都有一个“_id”,她是一个12字节的BSON类型数据,格式如下

    56c56dd4ca446fab71e4c38a
    • 前4个字节表示时间戳
    • 接下来的3个字节是机器标识码
    • 紧接的两个字节由进程id组成(PID)
    • 最后三个字节是随机数

    MongoDB存储的文档必须有一个的“_id”键,这个键值可以是任意类型,默认的是ObjectId类型对象。

    文档的“_id”是唯一的,以确保集合中的文档被唯一标识。

    MongoDB采用ObjectId,而不是其他比较常规的做法(比如自动增加的主键)的主要原因,因为在多个服务器上同步自动增加主键值既费力还费时。(不同机器可以通过机器名区分,同一个机器通过时间戳、随机数、进程id区分)

    创建新的ObjectId

    > newObjectId_1 = ObjectId()
    ObjectId("56c686d264799370c0ef357b")
    > newObjectId_2 = ObjectId()
    ObjectId("56c686d364799370c0ef357c")

    可以用已经生成的id取代自动生成的ObjectId

    d = ObjectId("56c686d364799370c0ef357c")
    ObjectId("56c686d364799370c0ef357c")

    获取文档的时间戳

    由于ObjectId的前4位是时间戳,因此不需要为文档特意的保存时间戳,可以用getTimestamp()获取

    > ObjectId("56c56dd4ca446fab71e4c38a").getTimestamp()
    ISODate("2016-02-18T07:08:04Z")

    ObjectId转化为时间戳

    > new ObjectId().str
    56c68c3b64799370c0ef3581
    > ObjectId("56c56dd4ca446fab71e4c38a").str
    56c56dd4ca446fab71e4c38a
  • 相关阅读:
    判断回文字符串
    汉诺塔递归问提
    课程作业02.2
    编写一个程序,此程序从命令行接收多个数字,求和之后输出结果。
    《大道至简》第一章java伪代码分析
    《大道至简》读后感
    用户体验
    大二上学期软件工程概论学习进度表(第十五周)
    12-24个人博客
    大二上学期软件工程概论学习进度表(第十四周)
  • 原文地址:https://www.cnblogs.com/kaituorensheng/p/5200399.html
Copyright © 2020-2023  润新知