猫鼬 - 如何在子文档中使用鉴别器

Mongoose- How to use discriminators in subdocument

我想要这样的输出

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.
}

因此,我知道我必须使用鉴别器。我遵循了以下

这是我所做的:

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 新手。如果您能指出错误,我将不胜感激。

在模型文件中添加这些行

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});
});