如何在 Mongoose Schema 方法中指定 `this`

How to specify `this` in Mongoose Schema methods

我尝试 fiddle 稍微了解一下 Mongoose 中的架构方法。我想知道如何从我正在使用的模式中调用信息,有点像使用 this.

我的架构如下所示:

'use strict';

var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

var BuildingSchema = new Schema({
    name: String,
    info: String,
    level: {                                //  The current level of the template, default value is 1
        type: Number,
        default: 1
    },
    ressource: {                            //  Ressouces
        level: [{
            gain: [{                        //  Gain per level
                amount: Number,
                ressource: {
                    type: Schema.ObjectId, 
                    ref: 'Ressource'
                }
            }],
            cost: [{                        //  Cost per level
                amount: Number,
                ressource: {
                    type: Schema.ObjectId, 
                    ref: 'Ressource'
                }
            }]
        }]
    },
    storage: {                              //  Storage
        capacity: [{                        //  Storage capacity changes per level
            inside: Number,
            outside: Number
        }],
        stored: {                           //  Stored
            inside: [{                      //  Ressources stored inside
                amount: Number,
                ressource: {
                    type: Schema.ObjectId, 
                    ref: 'Ressource'
                }
            }],
            outside: [{                     //  Ressources stored outside
                amount: Number,
                ressource: {
                    type: Schema.ObjectId, 
                    ref: 'Ressource'
                }
            }]
        }
    }
},
{
    toObject: { virtuals: true },
    toJSON: { virtuals: true }
});

/**
 * Methods
 */
BuildingSchema.methods = {
    printThis: function() {
         console.log('Print in prompt : ', this);
    }
};

module.exports = mongoose.model('Building', BuildingSchema);

我从我的控制器调用这样的方法

console.log('Print in browser : ', building.printThis);

到目前为止我的print in promptreturnsundefined

这是打印出 printThis 方法的内容:

> building = new Building()
{ _id: 554899217377c9b97c54bb36,
  storage: { stored: { outside: [], inside: [] }, capacity: [] },
  ressource: { level: [] },
  level: 1,
    id: '554899217377c9b97c54bb36' }
> building.printThis()
Print in prompt :  { _id: 554899217377c9b97c54bb36,
  storage: { stored: { outside: [], inside: [] }, capacity: [] },
  ressource: { level: [] },
  level: 1,
    id: '554899217377c9b97c54bb36' }
undefined
>