2016-05-17 19 views
0

因此,我嘗試從'TestGenerator'模型的'Sentence'模型中獲得'代名詞'模型。我有身份證,但沒有模型。如何在Keystone.js中獲得關係模型

TestGenerator型號

var TestGenerator = new keystone.List('TestGenerator', { 
    map: { name: 'title' }, 
    autokey: { path: 'slug', from: 'title', unique: true } 
}); 

TestGenerator.add({ 
    title: { type: String, required: true }, 
    sentences: { type: Types.Relationship, ref: 'Sentence', many: true }, 
}); 

TestGenerator.register(); 

var Sentence = new keystone.List('Sentence', { 
    map: { name: 'title' }, 
    autokey: { path: 'slug', from: 'title', unique: true } 
}); 

句模

Sentence.add({ 
    title: { type: String, required: true }, 
    pronouns: { type: Types.Relationship, ref: 'Pronoun', many: true }, 
    verbs: { type: Types.Relationship, ref: 'Verb', many: true }, 
}); 

Sentence.relationship({ ref: 'TestGenerator', path: 'sentences' }); 

Sentence.register(); 

Ponoun模型

var Pronoun = new keystone.List('Pronoun', { 
    map: { name: 'english' }, 
    autokey: { path: 'slug', from: 'english', unique: true }, 
}); 

Pronoun.add({ 
    english: { type: String }, 
    russian: { type: String } 
}); 

Pronoun.relationship({ ref: 'Sentence', path: 'pronouns' }); 

Pronoun.register(); 

我的控制器

view.on('init', function (next) { 

    var q = keystone.list('TestGenerator').model.findOne({ 
     slug: locals.filters.test_genetation, 
    }).populate('sentences'); 

    q.exec(function (err, result) { 
     locals.testGenerator = result; 
     locals.current_sentence = result.sentences[0]; 
     locals.data.englishSentence = locals.current_sentence.pronouns; 
     console.log(locals.data.englishSentence); 
     next(err); 
    }); 
}); 

而 「locals.data.englishSentence」 返回

["5739bd696ef7d78d16e9e0e5","573ac7645e3d7d7210f1c4be"] 

那麼,如何解決這個問題?不明白。

回答

0

這與貓鼬有關,實際上不是Keystone。貓鼬不會提供很深的人口,你需要一個單獨的插件,例如mongoose-deep-populate

0

您是否明確地在populate()調用中嘗試過包括pronouns

var q = keystone.list('TestGenerator').model.findOne({ 
    slug: locals.filters.test_genetation, 
}) 
    .populate('sentences sentences.pronouns') 
    .exec(function (err, result) { 
    ... 
    });