Intereting Posts
Лучший способ разработки / управления / разработки повторяющихся задач / календаря Используйте один и тот же foreach несколько раз Вызов свойства переменной напрямую vs getter / seters – OOP Design Упростить фракцию Как настроить пользовательские заголовки для отдельных действий контроллера в ZF2? Загрузите файл, созданный в выходном буфере PHP, из вызова AJAX Изображение от RGB до Cmyk в php Сохранение содержимого nicedit textarea в базе данных mysql Json: PHP для JavaScript безопасен или нет? echo vs echo intval PHP Передача данных на другую страницу после отправки формы с помощью PHP Пользовательская проверка не работает – Yii2-app-basic-Yii2 Приоритеты страницы сервера между index.php или index.html Предупреждение: mysql_connect (): Нет такого файла или каталога (попытка подключения через unix: ///tmp/mysql.sock) в Отобразить предполагаемый диапазон дат поставки, основанный на запасе товаров в корзине WooCommerce

mongo Ошибка PHP-приложения: Неустранимая ошибка: исключить исключение «MongoException» с сообщением «». не разрешено в ключе

У меня есть следующий массив PHP:

array (size=9) 'script_desc' => string 'Test Script' (length=21) 'script_date' => string 'May 11 2016 15:40:48' (length=20) 'log_date' => string 'May 12 2016 09:17:58' (length=20) 'name' => string 'test name' (length=2) 'type' => string 'location_status' (length=15) 'status' => boolean false 'test.server.1' => array (size=1) 'packages' => array (size=2) 'package1' => array (size=4) 'package_name' => string 'package1' (length=10) 'current_version' => string 'package1-1.4.26-r1' (length=20) 'latest_version' => string '1.4.26-r1' (length=9) 'package_status' => string '=' (length=1) 'package2' => array (size=4) 'package_name' => string 'package2' (length=14) 'current_version' => string 'package2-0.31.1-r1' (length=24) 'latest_version' => string '0.31.1-r2' (length=9) 'package_status' => string '<' (length=1) 'test.server.2' => array (size=1) 'packages' => array (size=2) 'package1' => array (size=4) 'package_name' => string 'package1' (length=16) 'current_version' => string 'package1-0.35.1-r0' (length=26) 'latest_version' => string '0.35.1-r0' (length=9) 'package_status' => string '=' (length=1) 'package3' => array (size=4) 'package_name' => string 'package3' (length=3) 'current_version' => string 'package3-5.3.2-r0' (length=33) 'latest_version' => string '5.3.2-r0' (length=8) 'package_status' => string '=' (length=1) '_id' => float 5 

Вот код, который я использую, чтобы попытаться вставить этот массив в мою базу данных mongo:

  68 function add_history_record($location) 69 { 70 $m = new MongoClient("mongodb://10.1.1.1:27017"); 71 $db = $m->mymongodb; 72 $collection = $db->mycollection; 73 $location['_id'] = getNextSequence("locationid"); 74 $cursor = $collection->insert($location); 75 var_dump($cursor); 76 } 

Сообщение об ошибке, которое я получаю, следующее:

Неустранимая ошибка: исключить исключение «MongoException» с сообщением «». не разрешено в ключе: test.server.1 'в /var/www/html/mongotestapp/inventory.php в строке 74

Что я пробовал до сих пор:

Чтобы доказать себе, что у меня есть ключи с "." в нем я использовал robomongo для добавления следующего документа:

 { "_id" : ObjectId("573483ae3747106e60a087f9"), "test.server.1.1" : 123 } 

Он не сохранил документ в моей коллекции. Я не уверен, что мне не хватает в моем PHP-коде … Любые предложения?

ИЗМЕНИТЬ 1:

Я изменил свой код, чтобы включить следующее:

  68 function add_playbook_history_record($location) 69 { 70 $m = new MongoClient("mongodb://10.1.1.1:27017"); 71 $db = $m->phonesys; 72 $collection = $db->inventory; 73 $location['_id'] = getNextSequence("locationid"); 74 printf($location['_id']); 75 echo "<pre>".json_encode($location)."</pre>"; 76 $cursor = $collection->insert($location, array("w"=>1)); 77 78 // $cursor = $collection->insert($location, array("w" => 0,"j"=>true)); 79 } 

Я вижу, что система генерирует законный идентификатор местоположения. Я также взял json-форматированный вывод и протестировал его в jsonlint, чтобы убедиться, что он правильно отформатирован и т. Д. Наконец, я начал играть с параметрами записи. Когда я включаю строку 78, система не возвращает никаких сообщений об ошибках, но записи не добавляются в базу данных. Но когда я устанавливаю w = 1, он не работает с тем же сообщением об ошибке.
Я играл с различными вариантами и читал это: http://php.net/manual/en/mongo.writeconcerns.php, но если у вас есть какие-то советы, у меня все уши.

У меня нет осколков или других серверов. Сейчас работает только один главный сервер mongodb.

Благодарю.

У вас не может быть . в ваших ключевых именах, как сообщает об этом сообщение об ошибке.

MongoDB принимает это прямо, но вы не сможете запросить эти имена полей, как в запросах, точка имеет особое значение:

 // document {foo:{bar:"baz"}}} // query db.col.find( { 'foo.bar' : 'baz' } ); 

Все официальные водители защищают от сдачи a . (и другие символы) в именах ключей, и, следовательно, драйвер PHP правильно отвергает это.