2011-11-10 17 views
12

Ho un'applicazione Android che invia dati json allo script PHP. Lo script PHP deve salvare i dati in MongoDb.Inserire JSON in MongoDb direttamente da PHP

Quando inserisco i dati, MongoDb tratta questi dati come una stringa.

$ conn = new Mongo ('mongodb: //127.0.0.1: 27017');

// access database 
$db = $conn->Data; 

// access collection 
$collection = $db->Collection; 
$collection->insert($myjson) 

Come posso dire al driver MongoDb PHP che è già un documento JSON.

Grazie

risposta

16

Il PHP MongDB driver accetta array per gli inserti e le interrogazioni (vedi qui: http://www.php.net/manual/en/mongo.queries.php)

quindi è necessario convertire il vostro JSON a un array.

Per fortuna, in generale, questo è abbastanza facile ... ecco un frammento di un pezzo di codice più lungo (vedi questo article) per inserire i dati JSON dal API di Twitter in una matrice, poi in 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); 
} 

Nota lo json_decode() che trasforma il JSON in un array PHP.

+6

Come si gestisce l'inserimento di tipi di dati nativi Mongo come MongoDate? – karnage

0

MongoDB utilizza BSON non JSON quindi è necessario ricodificare in ogni modo. Inoltre, ricordo di aver parlato con kchodorow di questo argomento e l'interfaccia raw non è stata esposta (almeno un anno e mezzo) e dubito che ora sia così anche se riesci a ottenere dati BSON da qualche parte, non puoi evitare il de /codificare.

2

Ecco un suggerimento per chi vuole farlo, ma desidera aggiornare i record anziché inserirne di nuovi. Al fine di ottenere l'approccio di Justin al lavoro, ho dovuto fare in modo che si converte l'oggetto _id per ogni elemento ad un 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); 
}