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


PHP + MongoDB: Error when trying to insert an multi-dimension array into MongoDB

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

我创建了一个小型随机帖子生成器,它应该生成一个带有帖子的数组以及它应该包含的 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"时,我得到了很多条目(文档),但它们被"拆分"了,例如"标签"在一个文档中,"注释"在另一个文档中,依此类推。

对我的错误的任何帮助或建议将不胜感激。

谢谢
真诚
- 梅斯蒂卡

看起来很像你想做

$collection->insert($post);

而不是:

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

你没有说你的var_dump显示什么变量。 是$post还是$item?

在调用 $collection->insert($item);; 之前,请执行 var_dump( $item )。这应该确切地告诉您要插入到集合中的内容。您很可能会发现它不是一个数组或对象。