直接从PHP插入JSON到MongoDb

时间:2011-11-10 01:02:38

标签: php json mongodb

我有一个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)

如何向MongoDB PHP驱动程序说它已经是json文档?

由于

5 个答案:

答案 0 :(得分:18)

PHP MongDB驱动程序接受插入和查询的数组(请参阅此处:http://www.php.net/manual/en/mongo.queries.php

因此您需要将JSON转换为数组。

幸运的是,一般来说这很容易......这是一段代码片段(请参阅此article),将来自Twitter API的JSON数据插入数组,然后插入MongoDB:< / p>

// 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数组。

答案 1 :(得分:4)

以下是其他想要执行此操作的提示,但希望更新记录而不是插入新记录。为了让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);
}

答案 2 :(得分:0)

MongoDB使用BSON而非JSON,因此您无论如何都需要重新编码。另外,我记得和kchodorow谈论过这个问题,并且原始接口没有曝光(至少半年),我怀疑它现在是如此,即使你设法从某个地方获得BSON数据,你也无法避免de /编码。

答案 3 :(得分:0)

由于MongoDB PHP库支持从JSON到BSON以及从BSON到PHP Std类对象的转换,因此您可以按照简单的步骤进行操作。

    //Convert Row (Document) to json
    $json_row = json_encode($row);

    //Convert JSON to BSON
    $bson = \MongoDB\BSON\fromJSON($json_row);

    //Convert BSON to PHP Std Class object
    $row = \MongoDB\BSON\toPHP($bson);


    // Insert Record to Document
    $collection->insertOne($row);

您可以从此处获取完整的MongoDB数据库备份和还原脚本 https://github.com/sulochanatutorials/php-mongodb-backup-restore

答案 4 :(得分:0)

使用 PHP 7 驱动程序更新 2021:

假设您的 json 字符串是

$myjson = {"name":"foo", "age":30}

先用 PHP json_decode 解码。返回一个数组。

$myarraydata = json_decode($myjson)

现在可以直接插入到mongoDB中了

$bulk = new MongoDB\Driver\BulkWrite(['ordered' => true]);
$bulk->insert($myarraydata);
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000);
$result = $connection->executeBulkWrite('dbname.collection_name', $bulk, $writeConcern);

查看批量操作官方文档here