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

时间:2016-12-11 12:52:10

标签: node.js mongodb mongoose mongoose-schema

我希望输出像这样

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 个答案:

答案 0 :(得分: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});
});