Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当我保存时,Mongoose是否会自动为我创建唯一的ID?_Javascript_Mongodb_Mongoose - Fatal编程技术网

Javascript 当我保存时,Mongoose是否会自动为我创建唯一的ID?

Javascript 当我保存时,Mongoose是否会自动为我创建唯一的ID?,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,我使用的简单代码如下: // mongoose helper methods const saveInstance = (name, schema, obj) => { const Model = mongoose.model(name, schema); const Instance = new Model(obj); return Instance.save(); }; 架构没有ID属性,但我在数据库中看到: "_id": { "$oid": "5c1

我使用的简单代码如下:

// mongoose helper methods
const saveInstance = (name, schema, obj) => {
  const Model = mongoose.model(name, schema);
  const Instance = new Model(obj);
  return Instance.save();  
};
架构没有ID属性,但我在数据库中看到:

"_id": {
        "$oid": "5c14201afbf31900047f9ccf"
    },
我想假设Mongoose创建了这个ID,还是MongoDB创建了这个ID?你能提供一份推荐信吗

还有,为什么对象中的对象语法奇怪,为什么不直接将ID作为
\u ID
的值?

MongoDB博客帖子:

默认情况下,MongoDB生成一个唯一的ObjectID标识符,该标识符在将新文档写入数据库之前分配给新文档中的_id字段

MongoDB博客帖子:

默认情况下,MongoDB生成一个唯一的ObjectID标识符,该标识符在将新文档写入数据库之前分配给新文档中的_id字段


实际上有两个问题,让我逐一回答

  • Mongoose正在创建此ID,还是MongoDB创建了此ID

  • 更准确的答案是MongoDB Node.js驱动程序(而不是MongoDB服务器)

    让我们明确区分我们所指的内容:

    • =环绕

    • (驱动程序)=连接到数据库的数据库客户端

    • =存储数据的数据库服务器,有两个版本:&

    请注意

    MongoDB驱动程序会自动为_id字段生成ObjectId

    MongoDB客户端应该添加一个带有唯一ObjectId的_id字段

    \u id
    字段是在客户端生成的,不像某些数据库具有在数据库服务器上生成主字段的功能

    实际上,Mongoose调用了MongoDB本机驱动程序提供的
    ObjectId
    函数。这是在没有服务器的情况下完成的,即您可以在没有服务器连接的情况下生成
    ObjectId
    。您可以尝试以下代码:

    /* no any database connection logic */
    const TestSchema = new mongoose.Schema() // blank schema, should contain only _id field
    
    const Test = mongoose.model('Test', TestSchema)
    const test = new Test()
    
    console.log(test.toString()) // this will log an object with an _id field
    

  • 还有,为什么对象中的对象语法奇怪,为什么不直接将ID作为
    \u ID
    的值


  • 这只是实际96位数据的字符串表示。这是一种用于将MongoDB文档表示为人类可读的格式。

    实际上有两个问题,让我逐一回答

  • Mongoose正在创建此ID,还是MongoDB创建了此ID

  • 更准确的答案是MongoDB Node.js驱动程序(而不是MongoDB服务器)

    让我们明确区分我们所指的内容:

    • =环绕

    • (驱动程序)=连接到数据库的数据库客户端

    • =存储数据的数据库服务器,有两个版本:&

    请注意

    MongoDB驱动程序会自动为_id字段生成ObjectId

    MongoDB客户端应该添加一个带有唯一ObjectId的_id字段

    \u id
    字段是在客户端生成的,不像某些数据库具有在数据库服务器上生成主字段的功能

    实际上,Mongoose调用了MongoDB本机驱动程序提供的
    ObjectId
    函数。这是在没有服务器的情况下完成的,即您可以在没有服务器连接的情况下生成
    ObjectId
    。您可以尝试以下代码:

    /* no any database connection logic */
    const TestSchema = new mongoose.Schema() // blank schema, should contain only _id field
    
    const Test = mongoose.model('Test', TestSchema)
    const test = new Test()
    
    console.log(test.toString()) // this will log an object with an _id field
    

  • 还有,为什么对象中的对象语法奇怪,为什么不直接将ID作为
    \u ID
    的值


  • 这只是实际96位数据的字符串表示。这是一种用于将MongoDB文档表示为人类可读的格式。

    这是否回答了您的问题?这正是您要查找的内容,请查看来自
    user0800
    的答案以了解更多详细信息。是的,大多数答案都是错误的,人们对此进行了评论,这就是为什么我提到阅读来自
    user0800
    的答案,这是正确的/最新的&它确实为您提出的多个问题提供了大多数信息。这是否回答了您的问题?这正是您想要的答案,请查看
    user0800
    的答案以了解更多详细信息。是的,大多数答案都是错误的,人们对此发表了评论,这就是为什么我提到阅读
    user0800
    的答案,它是正确的/最新的,它确实为您提出的多个问题提供了大多数信息。谢谢。完美答案。你能提供MongoDB的官方参考资料吗?不是一篇博客。是的,读一下:你能把问题标记为已解决吗?谢谢。完美答案。你能提供MongoDB的官方参考资料吗?不是一篇博客。是的,读一下:你能把问题标记为已解决吗?