0

ブログサイトを作っているのでDBとしてMongoDBを使っています。私のコレクション「記事」には、posts という名前の埋め込みドキュメントが 1 つあり、さらに 1 つの埋め込みドキュメントを挿入したいと考えています。コメントします。

DB:

  {
    "_id": ObjectId("4f41a5c7c32810e404000000"),
    "username":"abc",
    "posts": [
    {
        "_id": 1,
        "content": "dskcnkdcnksldcnskcd",
        "title" : "test1"
    },
    {"_id": 2,
        "content": "dskcsdsl;d,cl;sdcl;sdmcnkdcnksldcnskcd",
        "title" : "test2"
    },
   ]
}

投稿にコメントを挿入したい。

 {
    "_id": ObjectId("4f41a5c7c32810e404000000"),
    "username":"abc",
    "posts": [
    {
        "_id": 1,
        "content": "dskcnkdcnksldcnskcd",
        "title" : "test1",
     "comments":[
    {
      "content": "usdhcjsdcjskd",
      "by" : "abc"
    }
    ]
    },
    {"_id": 2,
        "content": "dskcsdsl;d,cl;sdcl;sdmcnkdcnksldcnskcd",
        "title" : "test2"
    }
   ]
}
4

2 に答える 2

3

コメントは、実際にはドキュメント内の投稿の埋め込みドキュメントであるため、クエリを次のように少し変更する必要があります。

$collection->update(array('_id' => new MongoId($bid),'posts.id'=> $pid),array('$push' => array('posts.$.comments' => $comment)));

それを試してみてください。

位置演算子をどのように使用したかに注目してください。ここで詳細を読むことができます: http://www.mongodb.org/display/DOCS/Updating/#Updating-The%24positionaloperator

于 2012-07-29T09:54:33.907 に答える
0

注意する必要があるのは、最初の挿入の構造です。たとえば、いくつかのリストを持つユーザーがいて、そのユーザーに最大 5 つのリストを持たせたいとします。これは、PHP でそれを行う方法です。

  1. localhost サーバーの PHP 環境に mongodb 拡張機能がない場合は、それをインストールする必要があります。

  2. mongodb をインストールして実行する必要があります。

すべてが完了したら、次のように簡単に実行できます。

$m = new Mongo("mongodb://localhost");
$db = $m->statistic->list;

// statistic is my database and list are collection.

$list =
        array(
            '_id' => 18,
            'lists' =>
            array(
                array(
                    'name' => 'Magento and PHP developer',
                    'recipients' =>
                    array(
                        'name' => 'Kristijan Glibo',
                        'email' => 'glibo.kristijan@gmail.com'
                    ),
                    'count' => 12345),
        ));

ここで、_id に (int)18 を使用していることがわかります。指定しない場合は、Mongo が生成します。このように、テスト目的でのみ使用します。ここで、リスト配列であり、その中のすべてのリストも独自のデータを持つ配列であることに注意してください! 私のリストMagento と PHP の開発者は、受信者と数に関するデータを持っています。受信者にもいくつかの固有のデータがあります。

最初に Mongodb に挿入します。

$document = $db->insert($list);

コレクションをダンプして、その中に保存したものを確認すると、次のようになります。

注: コレクションとその中のすべてを取得するには、次のコードを使用できます。

$documents = $db->find();
echo '<pre>';
foreach ($documents as $doc) {
    var_dump($doc);
}die();

********************これはダンプされたデータです********************

["_id"]=>
  int(18)
  ["lists"]=>
  array(3) {
    [0]=>
    array(3) {
      ["name"]=>
      string(10) "Magento and PHP developer"
      ["recipients"]=>
      array(2) {
        ["name"]=>
        string(4) "Kristijan Glibo"
        ["email"]=>
        string(25) "glibo.kristijan@gmail.com"
      }
      ["count"]=>
      int(12345)
    }

ユーザーを更新して、さらにリストを追加しましょう。

$updatelist = array('name' => 'updatelist', 'recipients' => array(),'count'=>2876);
$documentupdate = $db->
update(
array('_id'=>18),
array('$addToSet' => array('lists'=> $updatelist)));

selectin _id => 18 によって更新するオブジェクトと、更新方法を彼に伝えています。これをテストすると、そのリストが存在しない場合は新しいリストが追加されます。存在する場合はスキップします。

お役に立てれば!

于 2014-04-24T13:47:21.187 に答える