【问题标题】:How can I generate an ObjectId with mongoose?如何使用猫鼬生成 ObjectId?
【发布时间】:2013-07-27 19:25:33
【问题描述】:

我想用 Mongoose 生成一个 MongoDB ObjectId。有没有办法从 Mongoose 访问 ObjectId 构造函数?

  • 这个问题是关于从头开始生成一个新的 ObjectId。生成的 ID 是全新的通用唯一 ID。

  • 另一个问题是关于从现有字符串表示创建ObjectId。在这种情况下,您已经有一个 ID 的字符串表示形式(它可能是也可能不是普遍唯一的)并且您正在将其解析为 ObjectId

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    您可以在require('mongoose').Types 上找到ObjectId 构造函数。这是一个例子:

    var mongoose = require('mongoose');
    var id = mongoose.Types.ObjectId();
    

    id是新生成的ObjectId


    注意:正如Joshua Sherman 指出的那样,对于Mongoose 6,您必须在调用前加上new

    var id = new mongoose.Types.ObjectId();
    

    您可以在Mongoose#Types documentation 阅读有关Types 对象的更多信息。

    【讨论】:

    • 你怎么能确定这真的是独一无二的? mongoose 之前有检查过吗?
    • @R01010010 查看这些是如何生成的(谷歌)。没有检查,但它是概率性的
    • 如果你在一秒钟内在同一台机器上生成 16777216,那么你可能会得到一个副本。 :)
    • 更正:如果您在同一台机器上在一毫秒内生成 16777216,那么您可能会得到一个副本。 ?
    • 看起来像猫鼬6你必须添加新的new mongoose.Types.ObjectId()
    【解决方案2】:

    你可以像这样使用 mongoose 创建一个新的 MongoDB ObjectId

    var mongoose = require('mongoose');
    var newId = new mongoose.mongo.ObjectId('56cb91bdc3464f14678934ca');
    // or leave the id string blank to generate an id with a new hex identifier
    var newId2 = new mongoose.mongo.ObjectId();
    

    【讨论】:

      【解决方案3】:

      我需要在客户端生成 mongodb id。

      深入研究 mongodb 源代码后,我发现他们使用 npm bson lib 生成 ObjectID。

      如果您只需要生成一个 ObjectID 而无需安装整个 mongodb / mongoose 包,您可以导入更轻的 bson 库:

      const bson = require('bson');
      new bson.ObjectId(); // 5cabe64dcf0d4447fa60f5e2
      

      注意:还有一个名为 bson-objectid 的 npm 项目更轻

      【讨论】:

        【解决方案4】:

        使用 ES6 语法

        import mongoose from "mongoose";
        
        // Generate a new new ObjectId
        const newId2 = new mongoose.Types.ObjectId();
        // Convert string to ObjectId
        const newId = new mongoose.Types.ObjectId('56cb91bdc3464f14678934ca');
        

        【讨论】:

        • mongoose.Type 和 mongoose.Schema.Types 有什么区别?
        猜你喜欢
        • 2016-01-01
        • 2020-07-25
        • 2017-10-24
        • 2021-10-07
        • 2017-04-06
        • 1970-01-01
        • 2018-06-11
        • 2016-11-21
        • 2016-11-06
        相关资源
        最近更新 更多