15 Stimmen

JSON direkt aus PHP in MongoDb einfügen

Ich habe eine Android-Anwendung, die Folgendes sendet json Daten an das PHP-Skript. Das PHP-Skript muss die Daten in MongoDB speichern.

Wenn ich die Daten einfüge, behandelt MongoDB diese Daten als eine Zeichenkette.

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

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

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

Wie kann ich dem MongoDB PHP-Treiber mitteilen, dass er bereits ein json Dokument?

Gracias

19voto

Justin Jenkins Punkte 25601

Der PHP MongDB-Treiber akzeptiert Arrays für Inserts und Abfragen (siehe hier: http://www.php.net/manual/en/mongo.queries.php )

Sie müssen also Ihr JSON in ein Array umwandeln.

Glücklicherweise ist dies im Allgemeinen recht einfach ... hier ist ein Ausschnitt aus einem längeren Stück Code (siehe dies Artikel ), um JSON-Daten aus der Twitter-API in ein Array und dann in MongoDB einzufügen:

// 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);
}

Beachten Sie die json_decode() Funktion kann in ein Array konvertiert werden, indem true als zweiter Parameter übergeben wird.

8 Stimmen

Wie würden Sie das Einfügen von nativen Mongo-Datentypen wie MongoDate behandeln?

5voto

Tom Punkte 17812

Hier ist ein Tipp für andere, die dies tun möchten, aber eher Datensätze aktualisieren als neue einfügen wollen. Damit Justins Ansatz funktioniert, musste ich sicherstellen, dass ich das _id-Objekt für jedes Element in eine MongoId konvertiere:

// 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);
}

1voto

Da die MongoDB-PHP-Bibliothek die Konvertierung von JSON in BSON und BSON in PHP Std Class Object unterstützt, können Sie einfache Schritte durchführen.

    //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);

Das vollständige Skript zur Sicherung und Wiederherstellung der MongoDB-Datenbank finden Sie hier https://github.com/sulochanatutorials/php-mongodb-backup-restore

0 Stimmen

Bitte bearbeiten Ihre Antwort muss eine Erklärung enthalten, wie dies funktioniert und warum es eine Lösung für das in der Frage beschriebene Problem darstellt. Siehe Wie man antwortet .

0voto

chx Punkte 10935

MongoDB verwendet BSON und nicht JSON, so dass Sie in jedem Fall neu kodieren müssen. Außerdem erinnere ich mich, mit kchodorow darüber gesprochen zu haben, und die Rohschnittstelle war damals nicht offengelegt (es ist mindestens ein halbes Jahr her) und ich bezweifle, dass sie es jetzt ist, also selbst wenn Sie es schaffen, BSON-Daten von irgendwoher zu bekommen, können Sie die De-/Kodierung nicht vermeiden.

0voto

Arijit Punkte 1502

UPDATE 2021 MIT PHP 7 TREIBER:

Sagen wir, Ihr json-String ist

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

Dekodieren Sie es zunächst mit PHP json_decode . die ein Array zurückgibt.

$myarraydata = json_decode($myjson)

Jetzt können Sie sie direkt in MongoDB einfügen

$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);

Prüfen Sie die offiziellen Unterlagen zum Massenbetrieb aquí .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X