【问题标题】:Do ObjectIds that reference Models have their own timestamp? (Mongoose v3.6.15)引用模型的 ObjectId 是否有自己的时间戳? (猫鼬 v3.6.15)
【发布时间】:2013-07-27 08:01:20
【问题描述】:

Blogpost 模型中定义。

schema.user = { type: mongoose.Types.ObjectId, ref: 'User' };

稍后访问与模型匹配的文档时...

// Timestamp of when the user was created.
userDocument._id.getTimestamp();

// Different ObjectId, same value.
blogpostDocument.user.getTimestamp();

这些时间戳是否相同?

我不只是自己测试它的原因是,我正在极大地更改我的数据库模型以优化它们并添加新字段,而我还没有完成更改它们。因此,在更新所有文档以匹配新模型之前,我希望了解这个问题的含义。

谢谢!

【问题讨论】:

    标签: javascript node.js timestamp mongoose objectid


    【解决方案1】:

    具有相同基础原始值的 ObjectID 都将具有相同的时间戳。

    var mongoose = require('mongoose');
    var o1 = new mongoose.Types.ObjectId();
    var o2 = new mongoose.Types.ObjectId(o1.toString());
    o1.getTimestamp();
    //Fri Jul 26 2013 17:47:17 GMT-0600 (MDT)
    o2.getTimestamp();
    //Fri Jul 26 2013 17:47:17 GMT-0600 (MDT)
    

    附注:定义架构时,您需要使用mongoose.SchemaTypes.ObjectId 而不是mongoose.Types.ObjectId

    第二个旁注:最好将对象 ID 视为不透明的字符串,如果您想跟踪创建日期,请使用专用字段跟踪它们。请记住,mongodb 对象 ID 是由数据库本身外部的驱动程序生成的,时间戳是对象在内存中实例化的时间,这可能在它实际发送到数据库进行存储之前相当长。

    【讨论】:

    • 哦该死的。我什至无法连接前 4 个字节是时间戳 IIRC 的点。现在这似乎是一个愚蠢的问题!不过,感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 2020-07-25
    • 2021-09-25
    • 2017-03-23
    • 1970-01-01
    相关资源
    最近更新 更多