Вставьте JSON в MongoDB непосредственно из PHP


У меня есть приложение для Android, которое отправляет json данные в PHP-скрипт. PHP-скрипт должен сохранять данные в MongoDB.

Когда я вставляю данные, MongoDB обрабатывает эти данные как строку.

$conn = new Mongo('mongodb://127.0.0.1:27017');

// access database
$db = $conn->Data;

// access collection
$collection = $db->Collection;
$collection->insert($myjson)

Как я могу сказать PHP-драйверу MongoDB, что это уже документ json?

Спасибо

Author: ponury-kostek, 2011-11-10

3 answers

Драйвер PHP MongDB принимает массивы для вставок и запросов (см. Здесь: http://www.php.net/manual/en/mongo .queries.php)

Поэтому вам нужно преобразовать ваш JSON в массив.

К счастью, в целом это довольно просто... вот фрагмент более длинного фрагмента кода (см. Эту статью ) для вставки данных JSON из API Twitter в массив, а затем в MongoDB:

// Convert JSON to a PHP array
$usertimeline = json_decode($usertimeline);

// Loop array and create seperate documents for each tweet
foreach ($usertimeline as $id => $item) {
   $collection->insert($item);
}

Обратите внимание на json_декод() там, что превращает JSON в Массив PHP.

 17
Author: Justin Jenkins, 2011-11-10 06:22:33

Вот совет для тех, кто хочет это сделать, но хочет обновлять записи, а не вставлять новые. Чтобы заставить подход Джастина работать, мне нужно было убедиться, что я преобразую объект _id для каждого элемента в монгоид:

// Convert JSON to a PHP array
$usertimeline = json_decode($usertimeline);

// Loop array and create seperate documents for each tweet
foreach ($usertimeline as $id => $item) {
   $mongo_id = new MongoId($id);
   $item->_id = $mongo_id;
   $collection->update(array('_id' => $mongo_id), $item);
}
 3
Author: Tom, 2012-03-08 22:00:07

MongoDB использует BSON, а не JSON, поэтому вам все равно нужно перекодировать. Кроме того, я помню, как говорил об этом с kchodorow, и тогда необработанный интерфейс не был открыт (прошло по крайней мере полгода), и я сомневаюсь, что сейчас это так, даже если вам удастся откуда-то получить данные BSON, вы не сможете избежать де/кодирования.

 0
Author: chx, 2011-11-10 02:36:57