sun_qqq 2018-11-22 02:30 采纳率: 0%
浏览 422

Para._id = ObjectId(Para._id),为何不能改变_id的值?

node.js中发现一个很神奇的地方,如下

Para._id = ObjectId(Para._id),

为何不能改变_id的值?

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-07 08:25
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在JavaScript和Node.js中,ObjectId是一个内置的对象类型。它的唯一标识符是自动分配给每个对象的一个数字ID。这种设计使得ObjectId具有不可更改性,因为一旦一个ObjectId被创建,其值就不能再次修改。

    以下是一个简单的例子:

    const para = {
      _id: new ObjectId(),
    };
    
    // 修改_id 的值会导致错误
    para._id = 'newValue';
    
    console.log(para); // { _id: "54a79c06d1e3f20b878e67a4" }
    

    在这个例子中,我们尝试将_id的值设置为一个新的字符串'newValue',这会引发错误。这是因为ObjectId是一个不可变的数据结构,一旦创建,其值就无法再被修改。

    如果你想要在Node.js中模拟这个特性,可以使用以下方法:

    const Para = require('mongoose').model('Para', {
      id: String,
    });
    
    const para = new Para({ id: new ObjectId() });
    
    // 修改_id 的值不会导致错误
    para.id = 'newValue';
    
    console.log(para); // { id: "54a79c06d1e3f20b878e67a4" }
    

    但是,请注意,这种方法虽然能够让你暂时模拟ObjectId的不可变性质,但并不推荐长期依赖。Node.js中的ObjectId本质上是一种临时对象,当它不再用于存储数据时,会被自动销毁。

    评论

报告相同问题?