【问题标题】:Mongoose- How to use discriminators in subdocumentMongoose-如何在子文档中使用鉴别器
【发布时间】:2016-12-12 09:28:13
【问题描述】:

我希望输出是这样的

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

【问题讨论】:

    标签: node.js mongodb mongoose mongoose-schema


    【解决方案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});
    });
    

    【讨论】:

      猜你喜欢
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多