【问题标题】:Node + Express Mongoose Sub Collection Document InsertNode + Express Mongoose 子集合文档插入
【发布时间】:2012-11-04 22:36:01
【问题描述】:

我有一个 Node + Express 项目正在运行,我正在使用以下架构和模型构建一个基本的博客系统

var Post = mongoose.Schema({
    title: String,
    body: String,
    author: String,
    dateCreated: {type: Date, default: Date.now },
    comments: [{author: String, body: String, date: Date}]
});
var Post = db.model('Post', Post);

我通过以下代码接受发布请求并从中更新标题、正文和作者

app.post('/addpost', function(req,res){
    console.log(req.body.post);
    var post = new Post(req.body.post);
    post.save(function(err){
        if(!err){
            res.redirect('/');
        }else{
            res.redirect('/');
        }
    })
})

我的问题是,如何使用我已经开发的代码向架构添加注释?

req.body.post 输出

{ title: 'Hello World', body: 'This is a body', author: 'Bioshox' }

这对于 Mongoose 来说显然是可以接受的,但是为了添加 cmets,我该怎么做呢?

谢谢!!

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:

    可以使用以下代码sn-p:

    var comment = {
        author: req.body.post.author , 
        body: req.body.post.body, 
        date: new Date()
    };
    
    Post.findOneAndUpdate(
      { title: req.body.post.title },
      { $push: { comments: comment }},
      { safe: true, upsert: true },
      function(err, blogModels) {
        // Handle err
      });
    

    这个 sn-p 只是尝试查找 Blog 帖子,如果成功则 $push 一个新评论,否则,添加一个带有初始评论的博客帖子。因此,您的最终代码应如下所示:

    app.post('/addpost', function(req,res) {
        var comment = {
            author: req.body.post.author , 
            body: req.body.post.body, 
            date: new Date()
        };
    
        Post.findOneAndUpdate(
          { title: req.body.post.title },
          { $push: { comments: comment }},
          { safe: true, upsert: true },
          function(err, blogModels) {
            // Handle err
            });
    });
    

    【讨论】:

    • 如果upsert属性是true,那么mongo首先尝试查找符合title: req.body.post.title条件的文档。如果是这样,只需使用{$push...} 更新文档。否则,mongo 创建一个新文档,插入它并 $push 第一个评论 init。更多信息:docs.mongodb.org/manual/reference/command/findAndModify
    • 实际上我认为 upsert 会寻找具有该标题的 帖子,如果它不存在则创建帖子而不是评论
    猜你喜欢
    • 2014-09-15
    • 2016-06-14
    • 1970-01-01
    • 2016-02-22
    • 2016-12-14
    • 2021-03-28
    • 1970-01-01
    • 2016-10-20
    • 2015-06-02
    相关资源
    最近更新 更多