node.js - 当 Mongoose 模型是新的时,有没有办法自动生成 ObjectId?

标签 node.js mongodb mongoose

有没有办法在 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 Persion() 两次会创建两个具有相同 _id 值的对象。

那么有没有办法让我每次执行“new Person()”时都会生成一个新的 ObjectId()?

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

我也试过了:

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

即便如此,doc 也不包含 ObjectId。但如果我查看数据库,它确实包含它。

附言我正在使用 Mongoose 2.7.1

p.p.s.我知道我可以在创建人时手动创建 ObjectId:

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

但我宁愿不必导入 ObjectId 并且每次我想新建一个人时都必须新建它。猜想我习惯使用 mongodb 的 java 驱动程序,我可以在 Model 构造函数中为 _id 字段创建值。

最佳答案

当你调用 var person = new Person(); person._id 应该为您提供 id(即使尚未保存)。只需实例化它就足以给它一个 id。之后您仍然可以保存它,这将存储 id 以及 person 对象的其余部分

关于node.js - 当 Mongoose 模型是新的时,有没有办法自动生成 ObjectId?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11604928/

相关文章:

node.js - 找不到模块 'bcrypt'

python - 在 mongodb 中查询大列表的最快方法

node.js - 如何以 HTML5 输入类型日期格式(dd/mm/yyyy)显示 Mongoose 日期,

linux - MongoDB 索引 IdAccount 字段,以便按帐户高效搜索

node.js - 如何在远程服务器上运行多个 mongodb 数据库

node.js - 在对话中获取最新消息

javascript - 有没有办法为 node.js 的 golang 库创建绑定(bind)?

javascript - 使用 module.exports 上面的函数可以吗?

node.js - Bash 错误的退出代码

node.js - 过去 30 天内每天销售的订单数