猫鼬在储蓄前受到影响

时间:2013-09-12 10:20:11

标签: node.js mongodb mongoose

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?

1 个答案:

答案 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驱动程序   它理解的选项的实例。