2012-04-17 18 views
1

私はマスター・テーゼのテスト・アプリケーションを作成しています。私は非常に単純なブログを作成して、 MongoDBの使用に関する不利な点、機能などについて説明します。PHP + MongoDB:MongoDBに多次元配列を挿入しようとしたときにエラーが発生しました

小さなポストジェネレータを作成しました。ポストを持つ配列と、MongoDB内のブログポスト文書用に含めるべきすべての配列を生成する必要があります。

私の配列は次のようになります。

array 
    'author' => 
    array 
     'name' => string 'Shaine Coffey' (length=13) 
     'email' => string '[email protected]' (length=16) 
    'post' => string 'Vivamus non lorem vitae odio sagittis semper. Nam tempor diam natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean eget magna. Suspendisse tristique neque venenatis lacus. Etiam bibendum fermentum metus. Aenean sed pede nec ante blandit viverra. Donec tempus, lorem fringilla ornare placerat, orci lacus vestibulum lorem, sit amet ultricies sem magna nec quam. Curabitur vel lectus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec dignissi'... (length=570) 
    'date' => string 'Wed Mar 28 02:52:23 +0000 2007' (length=30) 
    'rating' => int 0 
    'comments' => 
    array 
     0 => 
     array 
      'name' => string 'Finn Hale' (length=9) 
      'email' => string '[email protected]' (length=18) 
      'upVotes' => int 52 
      'downVotes' => int 88 
      'comment' => string 'augue malesuada malesuada. Integer id magna et ipsum cursus vestibulum. ligula. Aenean gravida nunc sed pede. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin vel arcu eu odio tristique pharetra. Quisque ac libero nec ligula consectetuer rhoncus. Nullam velit dui, semper et, lacinia vitae, sodales at, velit. Pellentesque ultricies dignissim lacus. Aliquam rutrum lorem ac risus. Morbi metus. Vivamus euismod urna. Nullam lobortis quam' (length=479) 
     1 => 
     array 
      'name' => string 'Axel Hall' (length=9) 
      'email' => string '[email protected]' (length=20) 
      'upVotes' => int 99 
      'downVotes' => int 31 
      'comment' => string 'mauris, aliquam eu, accumsan sed, facilisis vitae, orci. Phasellus dapibus ut, pellentesque eget, dictum placerat, augue. Sed molestie. Sed id risus quis diam luctus lobortis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Mauris ut quam vel sapien imperdiet ornare. In faucibus. Morbi vehicula. Pellentesque tincidunt tempus risus. Donec egestas. Duis ac arcu. Nunc mauris. Morbi non sapien molestie orci tincidunt adipiscing. Mauris molestie pharetra nibh. Aliquam '... (length=554) 
     2 => 
     array 
      'name' => string 'Laith Rowland' (length=13) 
      'email' => string '[email protected]' (length=21) 
      'upVotes' => int 15 
      'downVotes' => int 73 
      'comment' => string 'iaculis enim, sit amet ornare lectus justo eu arcu. Morbi Suspendisse eleifend. Cras sed leo. Cras vehicula aliquet libero. Integer in magna. Phasellus dolor elit, pellentesque a, facilisis non, bibendum sed, est. Nunc laoreet lectus quis massa. Mauris vestibulum, neque sed dictum eleifend, nunc risus varius orci, in consequat enim diam vel arcu. Curabitur ut odio vel est tempor bibendum. Donec felis orci,' (length=409) 
    'tags' => 
    array 
     0 => string 'War' (length=3) 
     1 => string 'Freedom' (length=7) 

すべてが生成されたランダムであり、例えば、コメントの数が変化することができ、タグの数と同じ。

私は、エラー警告を取得するMongoDBへの挿入コードを実行しようとすると:パラメータ1が配列であるか、またはオブジェクトを見込ん)(はMongoCollection ::挿入を

マイ挿入コードは次のようになります

for($i=0; $i<$n; $i++) { 
    $post = BlogPosts(); 

    foreach ($postas $id => $item) { 
     $collection->insert($item); 
    } 
} 
私は私のエラーは、私がどのように作成するかであることを疑ってい

$mongo = new Mongo(); 
$db = $mongo->insert_test; 
$collection = $db->testing; 

:私が原因できた

は(私のPHPファイルの先頭に)そのようなMongoDBのデータベースやコレクションを、入力されました私の配列ですが、どこにエラーがあるのか​​は分かりません。私はそれをJSONにエンコードしているとき、正しく検証されています。

また、MongoDBデータベース "insert_test"をコレクション "testing"の中で見ると、たくさんのエントリ(ドキュメント)が得られますが、 "分割"されているので、ある文書内にあり、「コメント」は別の文書内にあり、以下同様である。

私のエラーが何かに関する助けや提案は非常に高く評価されるでしょう。

おかげ
誠実
- Mestika

+0

BlogPosts()は何を返しますか?上記の形式の単一の投稿ですか?またはそのような投稿の配列? –

答えて

1

それはあなたが

$collection->insert($post); 

の代わりに、やりたいかのように非常に多くなります。

foreach ($postas $id => $item) { 
    $collection->insert($item); 
} 

をあなたはどのような変数あなたのvar_dumpショー言うことはありません。それは$ postのものか$ itemのものですか?

+0

ちょっとマイク、しかし原因の - あなたは絶対に正しいです。私が何を考えていたかわからない:-)ありがとう – Mestika

0

あなたは$集・呼び出す前に>($アイテム)を挿入;,のvar_dump($アイテム)を行います。コレクションに挿入しようとしているものを正確に伝える必要があります。配列やオブジェクトではない可能性が高いでしょう。

関連する問題