Вставьте 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-документом.
Спасибо
Ответы
Ответ 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/закодировать.