2016-12-11 4 views
0

Я хочу выход быть как этотMongoose- Как использовать дискриминаторы в поддокументе

var FeedSchema = new Schema({ 
    timestamp : {type : String, required : true}, 
    feed_type_code : {type : Number, required : true}, 
    gender : {type : String, required : true}, 
    feed_item : Article || Tip || etc. 
} 

Таким образом, я понимаю, что я должен использовать дискриминаторы. Я последовал следующий SO answer

Вот что я сделал:

var feed_type = {discriminatorKey : 'feed_item'}; 

var FeedSchema = new Schema({ 
    timestamp : {type : String, required : true}, 
    feed_type_code : {type : Number, required : true}, 
    gender : {type : String, required : true} 
}, feed_type); 

var TipSchema = new Schema({ 
    tip : {type : String, required : true}, 
    subtip : {type : String, required : true}, 
    display_count : {type : Number}, 
    likes : {type : Number} 
}, feed_type); 

var ArticleSchema = new Schema({ 
    title : {type : String, required : true}, 
    english_title : {type : String, required : true}, 
    image_url : {type : String, required : true}, 
    article_text : {type : String, required : true}, 
    english_article_text : {type : String}, 
    author : {type : String}, 
    english_author : {type : String} 
}, feed_type); 

Вот как я спасаю документ:

var article = new Article({ 
    title : req.body.title, 
    english_title : req.body.english_title, 
    image_url : req.body.image_url, 
    article_text : req.body.article_text, 
    english_article_text : req.body.english_article_text, 
    author : req.body.author, 
    english_author : req.body.english_author 
}); 

var feed = new Feed({ 
    gender : req.body.gender, 
    timestamp : moment().valueOf(), 
    feed_type_code : 9002, 
    feed_item : article 
}); 

feed.save(function(err, doc){ 
    if(err){ 
     res.json({success : -1}); 
     return; 
    } 
    res.json({success : 1, feed : doc}); 
}); 

Я не получаю выход статьи для этого:

{ 

"success": 1, 
"feed": { 
    "__v": 0, 
    "gender": "female", 
    "timestamp": "1481460218959", 
    "feed_type_code": 9002, 
    "_id": "584d49faa6ff3a23bc868ab3" 
} 
} 

Я новичок в Nodejs. Я был бы признателен, если бы вы могли указать на ошибку.

ответ

1

в файле модели добавьте эти строки

var Feed = mongoose.model('Feed', FeedSchema, 'feed'); 
var Article = Feed.discriminator('Article', ArticleSchema); 
var Tip = Feed.discriminator('Tip', TipSchema); 

module.exports = { 
    Feed : Feed, 
    Article : Article, 
    Tip : Tip 
} 

Это, как вы сохраните документ. Вам не нужно создавать отдельный объект Feed.

var article = new Article({ 
    gender : req.body.gender, 
    timestamp : moment().valueOf(), 
    feed_type_code : 9002, 
    title : req.body.title, 
    english_title : req.body.english_title, 
    image_url : req.body.image_url, 
    article_text : req.body.article_text, 
    english_article_text : req.body.english_article_text, 
    author : req.body.author, 
    english_author : req.body.english_author 
}); 

article.save(function(err, doc){ 
    if(err){ 
     console.log(err); 
     res.json({success : -1}); 
     return; 
    } 
    res.json({success : 1, feed : doc}); 
});