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 に答える