使用 Mongoose 和 Lodash
在大多数情况下,Mongoose 与 Lodash 兼容良好。但是,您需要注意一些注意事项。
cloneDeep()
您不应该在任何 Mongoose 对象上使用 Lodash 的 cloneDeep()
函数。这包括 连接、模型类 和 查询,但对 文档 尤其重要。例如,您可能会想尝试以下操作
const _ = require('lodash');
const doc = await MyModel.findOne();
const newDoc = _.cloneDeep(doc);
newDoc.myProperty = 'test';
await newDoc.save();
但是,如果 MyModel
具有任何数组属性,则上面的代码将抛出以下错误。
这是因为 Lodash 的 cloneDeep()
函数不会 处理代理,而 从 Mongoose 6 开始,Mongoose 数组是代理。通常您不需要深度克隆 Mongoose 文档,但是,如果您必须这样做,请使用以下方法替代 cloneDeep()
const doc = await MyModel.findOne();
const newDoc = new MyModel().init(doc.toObject());
newDoc.myProperty = 'test';
await newDoc.save();