在Mongoose模式中禁用插件

时间:2018-11-12 14:43:18

标签: node.js mongoose plugins

我正在使用Mongoose插件(mongoose-patch-history),该插件会自动将对模型的更改跟踪到MongoDB集合。我需要有选择地禁用该插件(即,我只想根据标志/标准跟踪某些模型的更改,而不是其他模型的跟踪)。 我相信我在插件中需要某种过滤功能,但是它没有为此提供机制。 我还有其他方法可以实现这一目标吗?

1 个答案:

答案 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)