2012-11-09 42 views
0

我刚开始使用MongoDB。我可以插入在终端新记录与像蒙戈命令:MongoDb插入错误(php) - BSON doc是X字节,最大为0

db.test.insert({var: 'data' }) . 

,我可以用PHP获得这些记录,如:

Array 
(
    [0] => Array 
     (
      [_id] => MongoId Object 
       (
        [$id] => 509d0a4ae6c4d3ca0ba30572 
       ) 

      [deneme] => 1 
     ) 

    [1] => Array 
     (
      [_id] => MongoId Object 
       (
        [$id] => 509d09e2a3047c588723f9bf 
       ) 

      [deneme] => 
      [name] => aa 
     ) 

) 

但我不能像PHP插入记录:

$m->insert(array(
'url' => 'http://www.query7.com', 
'software' => 'wordpress', 
'tutorials' => array('php','javascript','web development'), 
)); 

我得到这个错误: 致命错误:未捕获异常'MongoException'消息'BSON文档的大小为145字节,最大为0'

我已经测试过不同的php类,但我总是得到相同的错误。什么是“BSON doc的大小”?

谢谢

+0

你插入之前,选择一个数据库,并收集后消失? – Petrogad

+0

yes, $ m-> setDatabase(“test”); \t $ m-> setCollection(“test”); \t \t \t $间 - >刀片(阵列( \t 'URL'=> 'http://www.query7.com', \t '软件'=> '的wordpress', \t '教程'= > array('php','javascript','web development'), \t)); – Musher

+0

您正在尝试保存大于MongoDB可保存的文档。 – GBD

回答

1

我不认为你可以使用所有的$ m变量;尝试做一些像PHP文档建议:

$m = new Mongo(); 
$db = $m->selectDB('test'); 
$collection = new MongoCollection($db, 'phpmanual'); 

$collection->insert(array(
    'url' => 'http://www.query7.com', 
    'software' => 'wordpress', 
    'tutorials' => array('php','javascript','web development'), 
)); 

PHP Docs about Mongo

确保你在最新的MongoDB版本,可以发现here

+0

我已经尝试过这个和同样的错误:致命错误:在/home/hergul/www/democratusmessage/index.php中未捕获的异常'MongoException'带有消息'BSON doc的大小为145字节,最大值为0' 13堆栈跟踪:#0 /home/hergul/www/democratusmessage/index.php(13):MongoCollection-> insert(Array)#1 {main}在线/Home/hergul/www/democratusmessage/index.php在线13 – Musher

+0

@MustafaHergül您正在使用哪种版本的mongo? – Petrogad

+0

版本 - 1.6.3 – Musher

1

这通常在发生或者:

  • 您的MongoDB的下载不好,在这种情况下,我会从MongoDB站点下载最新版本:http://www.mongodb.org/downloads
  • 或者将最新的PHP驱动程序与这样一个旧版本混合使用。

自从MongoDB v1.6开始,PHP驱动程序发生了一次突破性变化,但它只关心PHP连接到MongoDB的方式和其他一些事情。它不应该影响您是否可以查询旧版本的MongoDB。

所以有很高的机会,这不是问题,但我不会排除。

无论哪种方式,我会:从Ubuntu的7.11

  • 升级,它不再是忠实地编程和维持,至12.04
  • 升级到最新的MongoDB
  • 升级你的PHP版本以及

它可能只是所有这些的混合物。

+0

我更新mongodb到2.0 .7,它的工作原理。谢谢... – Musher

+0

是的 - 我刚刚安装了一个全新的Debian 6(Squeeze),使用php5-cli(v5.3.3-7)和默认的Debian mongoDB(它只是1.4.4 * *)。好消息是你可以添加一个外部回购(10gen),而不是从源代码编译:http://docs.mongodb.org/manual/tutorial/install-mongodb-on-debian/ - 这给了我Mongo ** v2 2.2 **。如果你正在设置一台新机器,你也应该安装一个64位版本的操作系统,因为Mongo数据库只能在32位以下2GB)。这就是为什么我今天重新安装它... –

+0

从MongoDB站点的默认下载:http://www.mongodb.org/downloads来作为一个可执行的二进制文件。它不是deb打包的,而是将deb包的内容放入一个文件夹中的,只需编写一个服务脚本,它就像从repos安装一样。 – Sammaye

0

我已经做了一些研究,看起来您使用的MongoDB版本在调用db.isMaster()函数时不提供maxBsonObjectSize(请参阅here)。

,这可能是你正在使用访问的MongoDB数据库中的PHP驱动程序发生冲突,因为他们试图从连接对象的最大尺寸(见线604 here):

if (FAILURE == php_mongo_write_insert(&buf, Z_STRVAL_P(c->ns), a, connection->max_bson_size TSRMLS_CC)) { 

您应该更新你的MongoDB数据库或尝试找到一个与你正在使用的数据库版本兼容的PHP驱动程序。

相关问题