zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    续上-选课系统
    第一个java web的课堂练习-开始
    子类与父类方法间的关系
    课后作业-3
    小结
    Java中子类与基类变量间的赋值
    今日总结
    今日总结
    今日总结
    今日总结
  • 原文地址:https://www.cnblogs.com/kaituorensheng/p/5200399.html
Copyright © 2011-2022 走看看