var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var Cat = mongoose.model('Cat', { name: String });
var kitty = new Cat({ name: 'Zildjian' });
console.log(kitty);
kitty.save();
console.log(kitty);
此输出:
{ name: 'Zildjian', _id: 523194d562b0455801000001 }
两次
我已经尝试在超时后延迟保存,但它是相同的,它指向new Cat
上设置的_id而不是.save()
这是因为mongodb还是mongoose,为什么在实际持久性之前设置了_id?
答案 0 :(得分:10)
大多数MongoDb驱动程序将自动生成ObjectId / _id
客户端,包括Node.js的本机驱动程序。为了唯一地生成ID,会发生少量锁定,因此没有理由不将生成分发给连接的客户端。
Mongoose需要一个唯一的标识符来跟踪和引用对象,因此它会立即创建一个标识符。
在Node.JS客户端中,您可以optionally将属性forceServerObjectId
设置为true
以控制此行为。
但是,根据docs
使用Mongoose时,无法覆盖此项Mongoose强制db选项forceServerObjectId为false且不能 覆盖。 Mongoose默认服务器auto_reconnect选项 是可以覆盖的true。请参阅node-mongodb-native驱动程序 它理解的选项的实例。