如何根据其ID更新嵌入式文档?

克里斯·帕特森

我有一个嵌入式文档,需要更新。我在弄清楚如何更新给定ID的文档时遇到了麻烦。这是我到目前为止的内容,但是不起作用:

var Post = require('../models/post');
var comment_id = 5394f5be2f6953083908db47;
var updateData = {
    comment: req.body.comment,
    title: req.body.title
};

Post.update({ comments : { _id : comment_id } }, updateData, function(err,data) {
    return res.json({success: true});
});

var postCommentSchema = mongoose.Schema({
    title : String,
    comment : String,
    user : String,
    tags : [],
    created : {
        type: Date,
        default: Date.now
    }
});

var postSchema = mongoose.Schema({
    post : String,
    title : String,
    created : {
        type: Date,
        default: Date.now
    },
    comments : [postCommentSchema]
});

module.exports = mongoose.model('Posts', postSchema);
尼尔·伦恩

您必须将“ c​​omment_id”变量加引号,以使其成为有效的JavaScript。但是基本上,因为这是一个奇异_id值,因此不能多次出现,您可以使用“点符号”来寻址必填字段。然后,您需要一个位置$运算符来引用您在更新端匹配的字段的索引。

另外,您还需要$set运算符,否则“ updateData”对象将覆盖您引用的数组成员中的现有数据,即此处缺少的日期:

var comment_id = "5394f5be2f6953083908db47";

Post.update(
    { "comments._id" : comment_id } }, 
    { "$set": { 
        "comments.$.comment": req.body.comments,
        "comments.$.title": req.body.title
    } }, 
    function(err,numAffected) {
       return res.json({success: true});
    }
);

尽管您在这里没有使用它,但回调的第二个参数.update()是受语句影响的文档数,而不是实际的文档或数据。要将结果归还给文档,请查看.findOneAndUpdate()猫鼬API文档中的方法。

此外,官方的MongoDB文档还.update()显示了几种常见的使用情况。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章