0

我正在尝试向 mongodb 的条目添加评论。
这就是我到目前为止所拥有的

$mongo = new Mongo();
$db = $mongo->comedy;
$collection = $db->cartoons;
$obj = array( 
    "title" => "football", array('comment' => 'my comment here'),
    "author" => "joe" 
);

$collection->insert($obj);

产生这个条目

{
 "_id": ObjectId("5059fd31ba76883414000001"),
 "title": "football",
 "0": {
     "comment": "my comment here"
},
 "author": "joe"
}   

我的问题是这是在“足球”条目下嵌套评论的最佳方式吗?还是我应该以不同的方式去做?

这部分似乎不正确

"0": {
     "comment": "my comment here"
}

从下面的示例更新
,运行它会出错Fatal error: Call to undefined method MongoDB::update()

$mongo = new Mongo();
$db = $mongo->comedy;
$collection = $db->cartoons;

$mongo->comedy->update(array('title' => 'football'), array(
        '$push' => array('comments' => array('content' => 'Yo!', 'author' => $user_id))
));

然后当我运行它时

$mongo = new Mongo();
$db = $mongo->comedy;
$collection = $db->cartoons;
$obj = array(
    '$set' => array("title" => "football", "author" => "joe"), 
    '$push' => array('comments' => array('content' => 'Yo!'))
);

我明白了

{
 "_id": ObjectId("505a2493ba76883c08000007"),
 "title": "football",
 "0": {
     "$push": {
         "comments": {
             "content": "Yo!"
        }
    }
},
 "author": "joe"
}   
4

1 回答 1

2

这是 MongoDB 中一个非常典型的问题,作为一个菜鸟,一旦这里有一个很好的结构(你可以谷歌搜索一下),它也让我着迷:

{
    title: footbal,
    comments: [
        {content: '', author: ObjectId()},
        { // Next comment }
    ]
}

然后,您可以$push在评论字段中将所有评论从最新到最旧排序。

提醒一句:您可能会发现此模式在查询可能性方面有些限制,尤其是当您想要实时以不同的方式对评论进行排序或挑选出不同类型的评论时。在这种情况下,您将使用单独的集合来理想地容纳评论。

编辑

在 PHP 中,您将从插入文档开始:

$mongo = new Mongo();
$db = $mongo->comedy;
$collection = $db->cartoons;
$obj = array( "title" => "football");
$collection->insert($obj);

然后当需要添加新评论时,只需简单地 $push:

$mongo->comedy->update(array('title' => 'football'), array(
    '$push' => array('comments' => array('content' => 'Yo!', 'author' => $user_id))
));

这就是简单的方法:)

再次编辑

$obj = array('$set' => array("title" => "football", "author" => "joe"), '$push' => array('comments' => array('content' => 'Yo!'))));
于 2012-09-19T17:30:11.770 回答