2017-10-11 12 views
0

Keystone JS (How to alter a value before storing it to the database in Keystone JS)를 사용할 때 기존 속성 값을 변경하고 mongo 데이터베이스에 저장하는 방법을 알았습니다.Keystone에서 'save'후 mongo에 새 속성 추가

이제 새 속성을 추가하고 동일한 pre('save') 단계 동안 데이터베이스에 저장해야합니다.

목표는 게임의 결과 (기존 속성)가 '원'이면 부울 (true) 인 새 속성 'won'을 추가하는 것입니다. 이 중요한 경우 핸들 템플릿에 내가 {{#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);을 추가하려고 시도했지만 여전히 아무 것도 시도하지 않았습니다.

간단한 방법이 있나요?

답변

1

당신은 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 

    }) 

    }) 

} 

... 
+0

감사합니다, 흥미로운 보인다. 'locals.won'은 결과가 아닌 전체 결과로 설정됩니다. 각 결과를 반복하고 각각에 대한 지역 주민에게 속성을 추가하는 방법이 있을까요? – davidpauljunior

+1

여러 개의 게임을 찾고 각 게임에 ** won ** 속성을 추가하여 내 대답을 편집했습니다. 희망이 도움이됩니다. –