Ошибка вставки MongoDb (php) - документ BSON - это X байт, максимум - 0

Я только начал использовать MongoDB. я могу вставить новые записи в терминал с помощью команды mongo, например:

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»?

Спасибо


person Musher    schedule 09.11.2012    source источник
comment
вы выбираете базу данных и коллекцию перед вставкой?   -  person Petrogad    schedule 09.11.2012
comment
да, $m-›setDatabase(test); $m-›setCollection(тест); $m-›insert(array( 'url' =› 'query7.com', 'software' =› 'wordpress', 'tutorials' =› array('php','javascript','веб-разработка'), ));   -  person Musher    schedule 09.11.2012
comment
Вы пытаетесь сохранить документ, который больше, чем может сохранить MongoDB.   -  person GBD    schedule 09.11.2012
comment
@GDB, я пробую это: вставить (массив (тест => 'тест')) тогда я получаю ту же ошибку. 145 байт это много?   -  person Musher    schedule 09.11.2012
comment
Попробуйте это db.isMaster().maxBsonObjectSize/(1024*1024)+' MB' в командной оболочке mongo, взятой из здесь. Что он возвращает?   -  person juan.facorro    schedule 09.11.2012
comment
Были ли сделаны какие-либо изменения на вашем сервере? Похоже, что по какой-то причине глобальный максимальный размер для документов bson был стерт либо в драйвере PHP, либо в mongodb, так что в последнее время у вас были какие-либо изменения на вашем сервере?   -  person Sammaye    schedule 09.11.2012
comment
@juan.facorro › db.isMaster().maxBsonObjectSize/(1024*1024)+' МБ' NaN МБ ›   -  person Musher    schedule 09.11.2012
comment
@MustafaHergül А как насчет db.isMaster() в одиночку?   -  person juan.facorro    schedule 09.11.2012
comment
@juan.facorro {ismaster: правда, хорошо: 1}   -  person Musher    schedule 09.11.2012
comment
Есть несколько других SO с этим, и все это из-за того, что сервер mongo находится в очень старой версии. Было бы лучше хотя бы обновить его до какой-либо дальнейшей отладки.   -  person Petrogad    schedule 09.11.2012
comment
@Sammaye, я только что настроил сервер mongodb на свой компьютер. я ничего не меняю   -  person Musher    schedule 09.11.2012
comment
Я использую mongodb с версии 0.8. Я никогда не слышал о том, о чем говорит Фредерико, однако я бы сказал, что у вас может быть неисправная MongoDB, поэтому я бы переустановил, и вы могли бы также переустановить последнюю версию. Возможно, вы получили плохую загрузку, версия 1.6 была бы из очень-очень старого репозитория, явно устаревшего. Это на какой ОС?   -  person Sammaye    schedule 09.11.2012
comment
@Frederico я использовал docs.mongodb.org/manual/tutorial/install -mongodb-on-ubuntu для установки сервера. как я могу обновить монгодб   -  person Musher    schedule 09.11.2012
comment
@SalvadorDali версия: 1.6.3, но я удаляю это и устанавливаю mongodb20-10gen сейчас   -  person Musher    schedule 09.11.2012
comment
Я обновляю mongodb до 2.0.7, и он работает. спасибо ...   -  person Musher    schedule 09.11.2012


Ответы (4)


Скорее всего проблема в старой версии Mongo. Судя по вашему ответу ошибка вставки MongoDb (php) - документ BSON - это X байтов, максимум - 0 и ответ https://stackoverflow.com/a/12009052/1090562

Пожалуйста, ответьте здесь, если проблема не исчезнет после новой установки mongo.

person Salvador Dali    schedule 09.11.2012
comment
Я также обновился, и это не сработало для меня, у меня последняя версия 2.4, и это все еще происходит - person Liad Livnat; 06.08.2013

Я не думаю, что вы можете использовать все с переменной $m; попробуйте сделать что-то вроде рекомендаций php docs:

$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 о Mongo

Убедитесь, что у вас установлена ​​последняя версия mongoDB, которую можно найти здесь

person Petrogad    schedule 09.11.2012
comment
Я пробовал эту и ту же ошибку: Неустранимая ошибка: неперехваченное исключение «MongoException» с сообщением «размер документа BSON составляет 145 байт, макс. 0» в /home/hergul/www/democratusmessage/index.php:13 Трассировка стека: # 0 /home/hergul/www/democratusmessage/index.php(13): MongoCollection-›insert(Array) #1 {main} добавлено в /home/hergul/www/democratusmessage/index.php в строке 13 - person Musher; 09.11.2012
comment
@MustafaHergül, какую версию монго вы сейчас используете? - person Petrogad; 09.11.2012
comment
yikes .. Вам нужно действительно обновить это. Вероятно, ваш драйвер php создан для более поздней версии, чем та, на которой вы находитесь. - person Petrogad; 09.11.2012
comment
Веб-сервер Apache/2.2.17 Версия PHP PHP 5.3.5-1ubuntu7.11 Расширение PHP mongo/1.3.0RC2-dev - person Musher; 09.11.2012
comment
Откуда вы установили MongoDB, репозитории? Я не знал, что репозитории 7.11 все еще поддерживаются - person Sammaye; 09.11.2012
comment
@Sammaye я использовал этот документ: docs.mongodb.org/manual/ tutorial/install-mongodb-on-ubuntu для установки - person Musher; 09.11.2012

Обычно это может произойти из-за:

  • Плохая загрузка вашей MongoDB, и в этом случае я бы загрузил последнюю версию с сайта MongoDB: http://www.mongodb.org/downloads
  • Или смешивание самого последнего драйвера PHP с такой старой версией.

Начиная с версии 1.6 MongoDB, в драйвере PHP произошли критические изменения, но они касались только способа подключения PHP к MongoDB и некоторых других вещей. Это не должно было повлиять на то, можете ли вы запрашивать старую версию MongoDB.

Так что есть очень большая вероятность, что это не проблема, но я бы не исключал этого.

В любом случае я бы:

  • Обновите Ubuntu 7.11, он больше не поддерживается, до 12.04.
  • Обновите MongoDB до последней версии.
  • Также обновите версию PHP

Это может быть просто плохая смесь всего этого.

person Sammaye    schedule 09.11.2012
comment
Да, у меня только что была такая же ошибка при новой установке Debian 6 (Squeeze) с php5-cli (v5.3.3-7) и Debian mongoDB по умолчанию (только 1.4.4) . Хорошей новостью является то, что вы можете просто добавить внешнее репо (10gen), а не компилировать из исходного кода: docs.mongodb.org/manual/tutorial/install-mongodb-on-debian — это дало мне Mongo v2.2.2. Вам также следует, если вы настраиваете новую машину, установить 64-разрядную версию операционной системы, поскольку базы данных Mongo могут иметь размер только 2 ГБ для 32-разрядной версии). Вот почему я переустанавливал его сегодня... - person William Turrell; 08.12.2012
comment
Загрузка по умолчанию с сайта MongoDB: mongodb.org/downloads поставляется в виде исполняемого двоичного файла. Это не пакет deb, а содержимое пакета deb, помещенное в папку, все, что вам нужно сделать, это написать служебный скрипт, и он будет таким же, как установка из репозиториев. - person Sammaye; 08.12.2012

Я провел некоторое исследование, и кажется, что используемая вами версия MongoDB не предоставляет maxBsonObjectSize при вызове функции db.isMaster() (см. здесь).

Это может конфликтовать с драйверами PHP, которые вы используете для доступа к базе данных MongoDB, поскольку они пытаются получить максимальный размер из объекта подключения (см. строку 604 здесь):

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

Вам следует обновить базу данных MongoDB или попытаться найти драйвер PHP, совместимый с используемой версией базы данных.

person juan.facorro    schedule 09.11.2012