PHP + MongoDB:尝试将多维数组插入MongoDB时出错

时间:2012-04-17 08:40:47

标签: php mongodb multidimensional-array insert mongodb-php

我正在研究我的硕士论文的测试应用程序,我正在尝试创建一个非常简单的博客来展示使用MongoDB的一些优点,缺点,功能等。

我已经创建了一个小的随机post生成器,它应该生成一个带有帖子的数组以及它应该包含MongoDB中的博客帖子文档的所有内容。

我的数组看起来像这样:

array
  'author' => 
    array
      'name' => string 'Shaine Coffey' (length=13)
      'email' => string 'Lars_Cherry@.com' (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 'Magee_Huffman@.net' (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 'Phillip_Simmons@.org' (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 'Graham_Nicholson@.net' (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时,我收到错误警告:MongoCollection :: insert()期望参数1是一个数组或对象

我的插入代码如下所示:

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

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

我有理由进入MongoDB数据库和集合,就像这样(在我的PHP文件的顶部):

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

我怀疑我的错误在于我如何创建我的数组,但我似乎无法找到错误的位置。当我将其编码为JSON时,它已经过正确验证。

另一件事是,当我在集合“测试”中查看我的MongoDB数据库“insert_test”时,我得到了很多条目(文档),但它们被“拆分”了,所以例如“标签”是在一个文档中,“注释”在另一个文档中,依此类推。

对我的错误提出任何帮助或建议将非常感激。

感谢
真诚
- 梅斯蒂卡

2 个答案:

答案 0 :(得分:1)

看起来好像你想做

$collection->insert($post);

而不是:

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

您没有说明var_dump显示的变量。它是$ post还是$ item?

答案 1 :(得分:0)

在致电$ collection-&gt; insert($ item);之前,请执行var_dump($ item)。这应该告诉你你准备插入到集合中的确切内容。你很可能会发现它不是一个数组或对象。