2011-11-10 10 views
12

Mam aplikację na Androida, która wysyła dane json do skryptu PHP. Skrypt PHP musi zapisać dane w MongoDb.Włóż JSON do MongoDb bezpośrednio z PHP

Po wstawieniu danych, MongoDb traktuje te dane jako ciąg.

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

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

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

Jak mogę powiedzieć MongoDB PHP kierowcy, że jest już dokumentem json.

Dzięki

Odpowiedz

16

PHP MongDB kierowca zaakceptuje tablice dla wkładek i zapytań (patrz tutaj: http://www.php.net/manual/en/mongo.queries.php)

Więc trzeba konwertować JSON do tablicy.

Na szczęście, w ogóle to jest dość proste ... Oto urywek z dłuższy kawałek kodu (patrz ten article), aby wstawić dane JSON z API Twittera do tablicy, a następnie do 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); 
} 

Zauważ, że w tym miejscu JSON jest przekształcany w macierz PHP.

+6

Jak byś sobie wkładając rodzimych typów danych Mongo jak MongoDate? – karnage

0

MongoDB wykorzystuje BSON nie JSON więc trzeba ponownie zakodować jakikolwiek. Pamiętam też, że rozmawiałem o tym z kchodorowem, a surowy interfejs nie był wtedy odsłonięty (przynajmniej pół roku) i wątpię, czy tak jest, więc nawet jeśli uda ci się uzyskać dane BSON skądś, nie możesz uniknąć de /kodować.

2

Oto wskazówka dla innych, którzy chcą to zrobić, ale chcą zaktualizować rekordy zamiast wstawiać nowe. W celu uzyskania podejście Justina do pracy, musiałem się upewnić, że przekonwertować obiekt _id dla każdej pozycji do 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); 
}