2011-11-10 67 views
12

我有一個Android應用程序,它將json數據發送到PHP腳本。 PHP腳本必須將數據保存到MongoDb中。直接從PHP插入JSON到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文件說。

謝謝

回答

16

的PHP MongDB驅動程序接受插入和查詢陣列(在這裏看到:http://www.php.net/manual/en/mongo.queries.php

所以,你需要你的JSON轉換成數組。

幸運的是,在一般情況,這是很容易...這裏是從較長的一段代碼片段(見本article)以從微博API JSON數據插入到一個數組,然後進入的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數組。

+6

你會如何處理插入本機Mongo的數據類型,例如MongoDate? – karnage

0

MongoDB使用BSON而不是JSON,所以你需要重新編碼。此外,我還記得有關此事與kchodorow交談,原始界面未暴露(至少半年),現在我懷疑它現在如此,即使您設法從某處獲得BSON數據,也無法避免使用de /編碼。

2

以下是希望這樣做的其他人的提示,但希望更新記錄而不是插入新記錄。爲了得到賈斯汀的方法來工作,我必須確保我轉換_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); 
}