我最近发现如何在使用Keystone JS(How to alter a value before storing it to the database in Keystone JS)时更改现有属性的值并将其保存到mongo数据库。
现在我需要添加一个新属性,并在同一pre('save')
阶段将其保存到数据库中。
目的是说,如果游戏的结果(现有属性)是'赢',那么添加一个新属性'won',这是一个布尔值(true)。如果重要的话,我想要这个的原因是因为在车把模板中我想说{{#if won}}class="success"{{/if}}
Game.schema.pre('save', function(next) {
if (this.isModified('result')) {
if (this.result === 'Won') {
this.won = true;
}
}
next()
});
但没有任何反应。我读过你不能添加属性,除非它们已在模式中设置。所以我尝试在上面添加Game.schema.set('won', false);
,但仍然没有。
有一种简单的方法吗?
答案 0 :(得分:1)
您可以查看Mongoose virtuals ,这些属性可以获取并设置但不会持久保存到数据库中:
Game.schema.virtual('won').get(function() {
return this.result === 'Won'
})
http://mongoosejs.com/docs/guide.html#virtuals
如果您只是想在模板中使用它,那么您还可以在视图中的当地人上设置特定属性。
也许是这样的:
...
exports = module.exports = function(req, res) {
var view = new keystone.View(req, res)
var locals = res.locals
locals.games = []
view.on('init', function(next) {
var query = {} // Add query here
Game.model.find(query).exec(function(err, games) {
// Handle error
games.forEach(function(game) {
game.won = game.result === 'Won'
})
locals.games = games
})
})
}
...