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
而不是 .save()上设置的 _id
这是因为mongodb还是mongoose,为什么在实际持久化之前设置了_id?
最佳答案
大多数 MongoDb 驱动程序会自动生成 ObjectId/_id
客户端,包括 Node.js 的 native 驱动程序。生成唯一 ID 时会发生少量锁定,因此没有理由不将生成分发给连接的客户端。
Mongoose 需要一个唯一标识符来跟踪和引用对象,因此它会立即创建一个标识符。
在 Node.JS 客户端中,您可以 optionally例如,将属性 forceServerObjectId
设置为 true
以控制此行为。
但是,根据 docs 使用 Mongoose 时,这不能被覆盖:
Mongoose forces the db option forceServerObjectId false and cannot be overridden. Mongoose defaults the server auto_reconnect options to true which can be overridden. See the node-mongodb-native driver instance for options that it understands.
关于node.js - Mongoose _id 在保存前受影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18761595/