我正在使用Mongoose插件(mongoose-patch-history),该插件会自动将对模型的更改跟踪到MongoDB集合。我需要有选择地禁用该插件(即,我只想根据标志/标准跟踪某些模型的更改,而不是其他模型的跟踪)。 我相信我在插件中需要某种过滤功能,但是它没有为此提供机制。 我还有其他方法可以实现这一目标吗?
答案 0 :(得分:0)
插件在模式上设置中间件。就我而言,插件timestamp
注册了该中间件
schema.pre('findOneAndUpdate', function (next) {
if (this.op === 'findOneAndUpdate') {
this._update = this._update || {};
this._update[updatedAt] = new Date;
this._update['$setOnInsert'] = this._update['$setOnInsert'] || {};
this._update['$setOnInsert'][createdAt] = new Date;
}
});
我无法从架构(此处是有关如何访问已注册中间件的answer)中删除此中间件的信息。
。解决方案
我创建了一个具有完全相同的SchemaType的Schema的新实例。我避免再添加插件。
要创建具有相同schemaType的架构,只需访问属性paths
import _ from 'lodash'
import mongoose from 'mongoose'
// schema with plugin
import EntitySchema from '../entity.model'
// creating clone of paths for cleanliness
const schemaType = _.cloneDeep(EntitySchema.paths)
// new schema, free of plugins
const newSchema = new mongoose.Schema(schemaType)