如何在 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 prompt
returnsundefined
这是打印出 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
>
我尝试 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 prompt
returnsundefined
这是打印出 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
>