簡體   English   中英

將自定義實例方法動態添加到mongoose模式

[英]Dynamically add custom instance methods to a mongoose schema

有沒有辦法在已經“導出”后將自定義實例方法添加到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的調用, 當你創建一個SchemaSchema內部調用它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM