node.js - Mongoose _id 在保存前受影响

标签 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 而不是 .save()

这是因为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/

相关文章:

java中的mongodb问题与限制和排序

javascript - meteorjs 使用外部 mongoDb

javascript - MongoDB - Mongoose 查询 findOneAndUpdate() 不会更新/复制数据库

Node.js - 如何使用回调调用异步函数?

javascript - 在 GET 响应中看不到 JSON 字段( Mongoose )

javascript - casper 方法之后函数的返回值

node.js - Mocha之前一个套件中的每个都在另一个套件中运行

node.js - Mongoose Populate Child ref 返回空数组

json - 查询Mongodb子文档错误将循环结构转换为JSON

javascript - 当 promise 在 Redux 中间件内解析时,为什么我无法调度操作?