javascript - 将自定义实例方法动态添加到 Mongoose 模式

标签 javascript node.js mongoose database-schema

有没有办法添加custom instance methods在它已经“导出”之后到 Mongoose 模式。

例如,如果我有一个架构:

module.exports = function(app, db, config) {

  var MySchema = new Schema({ name: String });
  MySchema.methods.doIt = function() { console.log("I DID IT!"); }
  db.model("MySchema", MySchema);
}

然后我想在模式已经加载到 mongoose 模型对象中之后动态地向模式添加新方法。

MySchema = db.model('MySchema');
var obj = new MySchema({name: "robocop"});

var myNewMethod = function() { console.log(this.name); }

// Do Magic here to add the myNewMethod to object.

obj.myNewMethod();

你试过了吗?

我已经尝试将它添加到 mongoose 模型对象中,但是这会产生错误,指出模式对象没有我刚刚添加的方法。

MySchema = db.model('MySchema');
MySchema.schema.methods.myNewMethod = function() { console.log(this.name); }
db.model('MySchema', MySchema);

console.log(MySchema.schema.methods); // This shows my method was added!

...

var obj = new MySchema({name: "robocop"});
obj.myNewMethod(); //ERROR:  YOUR METHOD DOESN'T EXIST!

最佳答案

警告编码器。这是可能的,这是否是一个好主意留给读者作为练习。

您的架构当然受架构对象的影响,而不是模型的任何特定实例。因此,如果您想要修改架构,则需要有权访问架构本身。

这是一个例子:

var mongoose = require('mongoose')
  , db       = mongoose.connect("mongodb://localhost/sandbox_development")

var schema = new mongoose.Schema({
  blurb: String
})

var model = mongoose.model('thing', schema)

var instance = new model({blurb: 'this is an instance!'})

instance.save(function(err) {
  if (err) console.log("problem saving instance")

  schema.add({other:  String})  // teh secretz

  var otherInstance = new model({blurb: 'and I am dynamic', other: 'i am new!'})
  otherInstance.save(function(err) {
    if (err) console.log("problem saving other instance", err)

    process.exit(0)
  })
})

注意对 schema.add 的调用 Schema calls internally when you make a new one .

关于javascript - 将自定义实例方法动态添加到 Mongoose 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21945475/

相关文章:

node.js - 带有对象数组的 Mongoose 条件更新

javascript - 有没有办法查看两个 "references"是否引用 Google Places API 中的同一地点?

javascript - 尝试从表中删除 ROW 但删除我的所有行

javascript - HighCharts 中的绘图线重叠 || react Highcharts || Y轴间隔

Javascript 作用域和闭包,变量保持其值

node.js - 如何清除node js中清除浏览器cookie的req.session?

node.js - 无法在 Sequelize 迁移中执行原始查询

node.js - MongoDB Mongoose聚合查询深度嵌套数组删除空结果并填充引用

javascript - ColumnChart 谷歌可视化列颜色变化

node.js - 使用 Mongoose 和 Node 更新多个子文档