Вставьте 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
?
Спасибо
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.
Вот совет для тех, кто хочет это сделать, но хочет обновлять записи, а не вставлять новые. Чтобы заставить подход Джастина работать, мне нужно было убедиться, что я преобразую объект _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);
}
MongoDB использует BSON, а не JSON, поэтому вам все равно нужно перекодировать. Кроме того, я помню, как говорил об этом с kchodorow, и тогда необработанный интерфейс не был открыт (прошло по крайней мере полгода), и я сомневаюсь, что сейчас это так, даже если вам удастся откуда-то получить данные BSON, вы не сможете избежать де/кодирования.