1

我正在写一个博客系统。现在我正在处理帖子的评论。这是每个帖子的架构:

{
"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

我做错了什么?

PS顺便说一句,我认为用任何唯一的ID或类似的东西标记单独的评论会很好。如何指定 Mongo 为每个添加评论添加 obj_id 参数?提前致谢。

4

1 回答 1

1

使用“更新”并且它有效:

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

            },
于 2012-07-24T22:26:53.857 回答