Node + Mongo:将记录添加到集合内的数组中

时间:2012-07-24 22:07:31

标签: arrays node.js mongodb collections

我正在写一个博客系统。现在我正在撰写关于帖子的评论。以下是每篇文章的架构:

{
"topic": "Post Topic",
"post": "<p>\r\n\tPost text</p>\r\n",
"time_added": 1343167025,
"author": "Ashley Brooks",
"_id": {
    "$oid": "500f1a315759c73805000001"
}

}

现在,我想为这篇文章添加评论。我想存储评论的最佳方式就像:

{
"topic": "Post Topic",
"post": "<p>\r\n\tPost text</p>\r\n",
"time_added": 1343167025,
"author": "Ashley Brooks",
"_id": {
    "$oid": "500f1a315759c73805000001"
},
"comments" : [
    {
        "author":"James Brown",
        "comment":"My awesome comment"
    },
    {
        "author":"Jimmy White",
        "comment":"And this is my comment"
    }
]
}

我已经阅读了Mongo的一些文档,但是我找不到添加新注释的正确方法。这就是我现在正在做的事情:

exports.post = function(req, res) {
if (req.currentUser) {
    db.collection("posts", function (err, collection) {
        var obj_id = BSON.ObjectID.createFromHexString(req.params.id);
        console.log(obj_id);
        collection.findAndModify(
            {_id: obj_id}, // query for a post
            {$push: {
                comments: [ {author: req.body.comment, name: "testname" } ]
                }
            },
            function(err, object) {
                if (err){
                    console.warn(err.message);
                }else{
                    res.redirect('/');
                }
            });
    });
} else {
    res.redirect('/');
}

};

它给我这样的错误:

exception: must specify remove or update

我做错了什么?

P.S。顺便说一句,我认为用任何独特的id或smth标记单独的注释会很好。如何指定Mongo为每个添加注释添加obj_id参数?提前谢谢。

1 个答案:

答案 0 :(得分:1)

使用'更新'并且它有效:

collection.update(
            {_id: obj_id}, // query
            {$push: {
                comments: {comment: req.body.comment, name: "testname" }
                }

            },