Подтвердить что ты не робот

Вставьте JSON в MongoDb прямо из PHP

У меня есть приложение для Android, которое отправляет json-данные в PHP скрипт. PHP script должен сохранить данные в 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-документом.

Спасибо

4b9b3361

Ответ 1

Драйвер 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.

Ответ 2

Вот совет для других, которые хотят это сделать, но хотят обновлять записи, а не вставлять новые. Чтобы получить подход Justin к работе, я должен был убедиться, что я конвертирую объект _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);
}

Ответ 3

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