Вставьте JSON в MongoDb прямо из PHP - PullRequest
15 голосов
/ 10 ноября 2011

У меня есть приложение для 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 документ?

Спасибо

Ответы [ 3 ]

18 голосов
/ 10 ноября 2011

Драйвер 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_decode () , который превращает JSON в массив PHP.

4 голосов
/ 09 марта 2012

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

// 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);
}
0 голосов
/ 10 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...