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();