当前位置: 首页 > 知识库问答 >
问题:

有没有一种方法自动生成ObjectId时,猫鼬模型是新的'ed?

凤修为
2023-03-14

有没有一种方法可以在mongoose中声明一个模型模式,这样当模型是新的时,_id字段就会自动生成?

例如:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ObjectIdSchema = Schema.ObjectId;
var ObjectId = mongoose.Types.ObjectId;

var PersonSchema = new Schema({
    _id:            ObjectIdSchema,
    firstName:      {type: String, default: 'N/A'},
    lastName:       {type: String, default: 'N/A'},
    age:            {type: Number, min: 1}
});

var Person = mongoose.model('Person', PersonSchema);
_id:    {type:ObjectIdSchema, default: new ObjectId()}

但这当然不起作用,因为new ObjectId()只在模式初始化时被调用。因此,两次调用new person()将创建两个具有相同_id值的对象。

那么,有没有一种方法可以让我每次执行“newperson()”时都会生成一个新的ObjectId()?

我之所以尝试这样做,是因为我需要知道新人的_id值,以便进一步处理。

我也尝试过:

var person = new Person({firstName: "Joe", lastName: "Baz"});
person.save(function(err, doc, num){
    console.log(doc._id);
});

即使这样,doc也不包含ObjectID。但是如果我在数据库中查找,它确实包含它。

p、 我用的是猫鼬2.7。1.

p. p. s.我知道我可以在创建对象时手动创建对象:

var person = new Person({_id: new ObjectId(), firstName: "Joe", lastName: "Baz"});

我想我已经习惯了使用java驱动程序的mongob,在那里我可以创建模型构造函数中的_id字段的值。

共有3个答案

毕宇
2023-03-14

而不是:

_id:    {type:ObjectIdSchema, default: new ObjectId()}

你应该做:

_id:    {type:ObjectIdSchema, default: function () { return new ObjectId()} }
赫连琦
2023-03-14

添加auto标志:

_id: {
    type: mongoose.Schema.Types.ObjectId,
    index: true,
    required: true,
    auto: true,
  }

来源

霍书
2023-03-14

调用var person=new person()的那一刻;人_id应该给你id(即使它还没有被保存)。只需实例化它就足够给它一个id了。之后您仍然可以保存它,这将存储id以及person对象的其余部分

 类似资料:
  • 问题内容: 我想用Mongoose 生成一个MongoDB 。有没有办法从Mongoose 访问构造函数? 这个问题是关于从头开始 产生新的 。生成的ID是全新的通用唯一ID。 另一个问题是关于从 现有的字符串表示形式 创建一个。在这种情况下,您已经具有ID的字符串表示形式(它可能是通用的也可能不是唯一的),并且正在将其解析为。 问题答案: 您可以在找到构造函数。这是一个例子: 是一个新生成的。

  • 问题内容: 我有一个我以前从未见过的问题,猫鼬的findByIdAndUpdate没有在回调中返回正确的模型。 这是代码: 数据库中的原始文档如下所示: 进入的updateObj如下所示: 从回调返回的模型与原始模型相同,而不是updatedObj。如果我查询数据库,它已正确更新。它只是没有从数据库中返回。 这感觉像是一个“愚蠢的用户”错误,但我看不到它。任何想法表示赞赏。 问题答案: 在Mong

  • 问题内容: 我有一个让我感到困惑的奇怪问题。我有一个模型: 变体条目如下所示: 我需要添加一个新字段-说“颜色”。所以我这样做是为了批量更新: 但是,“颜色”字段未设置-如果我再次浏览并注释掉该行,则它不会显示。我似乎无法弄清楚为什么要这样做。我有一个onSave事件,该事件已正确触发,因此可以保存。我也没有对版本结构进行任何检查- 即没有代码只允许代码和价格。我显然缺少了一些东西,但几个小时后我

  • 问题内容: 我正在开发一个新项目(),并创建了一个包含大量变量的Object。由于我打算为所有这些添加吸气剂和设置器,所以我想知道:是否存在在给定类中自动生成吸气剂和设置器的捷径? 问题答案: 在所需类的源代码窗口中弹出上下文菜单(即右键单击)。然后选择子菜单;从该菜单中进行选择将导致出现向导窗口。 选择您要为其创建getter和setter的变量,然后单击。

  • 问题内容: 我有一个典型的架构和模型: 当我执行此更新时,它仅在定义回调时才有效,否则仅执行但数据库中的值未更改: 这有效: 这是一个错误吗?我没有在文档中看到是否需要回调,但是要求这样做很奇怪……我认为我在这里缺少了一些东西。 注意:我通过电子邮件匹配以测试建议,我在NodeJS v0.8.17中使用猫鼬v3.5.4,并具有简单的Express v3.0.6设置。 提前致谢。 问题答案: 用猫鼬

  • 问题内容: 我有看起来像这样的代码: 它返回一个长度为32的字符串,但我认为它不是有效的UUID。如果它是一个真正的UUID,为什么它是一个UUID,什么是代码,修改的值的目的和。 有没有更好的方法来生成UUID? 问题答案: 这些行将字节6和8的值限制在特定范围内。返回range内的随机字节,这些字节不是UUID的所有有效值。据我所知,这应该对片中的所有值进行。 如果您使用的是Linux,则可以