Heim >Backend-Entwicklung >PHP7 >Informationen zum Upgrade von PHP7 für den Betrieb von MongoDB
Vorwort
Viele Benutzer verwenden PHP+MongoDB, da MongoDB sehr praktisch zum Speichern unstrukturierter Daten ist. In PHP5 und davor wurden zwei offizielle Erweiterungen bereitgestellt: Mongo und MongoDB basieren auf Kategorien, die auf mehreren Kernklassen basieren, z. B. MongoClient. Die Kapselung ist sehr praktisch, daher werden grundsätzlich Mongo-Erweiterungen ausgewählt.
Einzelheiten finden Sie im offiziellen Handbuch: https://www.php.net/manual/zh/book.mongo.php
Mit dem Upgrade von PHP5 auf PHP7 Mongo wird offiziell nicht mehr unterstützt. Die Erweiterung unterstützt nur MongoDB, und die Leistungsverbesserung von PHP7 ist enorm, sodass die Leute nicht aufgeben können. Daher ist es zu einem dringenden Problem geworden, Mongo durch MongoDB zu ersetzen. MongoDB führt Namespaces ein, aber die funktionale Kapselung ist sehr schlecht. Wenn Sie native Erweiterungen verwenden müssen, bedeutet dies fast, dass Sie native Mongo-Anweisungen schreiben müssen. Diese Idee widerspricht der Idee, dass ORM die durch DB-IO-Operationen verursachten Syntaxprobleme vereinfacht und sich auf die Logikoptimierung konzentriert.
Einzelheiten finden Sie auch im offiziellen Handbuch: https://www.php.net/manual/zh/set.mongodb.php
In dieser Situation konnten MongoDB-Beamte dies nicht tun Hilfe aber Um die Nutzung zu erleichtern und den Marktanteil zu erhöhen, wurde eine auf der MongoDB-Erweiterung basierende Bibliothek gestartet: https://github.com/mongodb/mongo-php-library
Eine detaillierte Dokumentation dieser Bibliothek finden Sie unter siehe: https://docs.mongodb.com/php-library/current/reference/
MongoDB-Treiber
Wenn Sie den Originaltreiber verwenden, ist der ungefähre Die Syntax lautet wie folgt:
<?php use MongoDB\Driver\Manager; use MongoDB\Driver\BulkWrite; use MongoDB\Driver\WriteConcern; use MongoDB\Driver\Query; use MongoDB\Driver\Command; class MongoDb { protected $mongodb; protected $database; protected $collection; protected $bulk; protected $writeConcern; protected $defaultConfig = [ 'hostname' => 'localhost', 'port' => '27017', 'username' => '', 'password' => '', 'database' => 'test' ]; public function __construct($config) { $config = array_merge($this->defaultConfig, $config); $mongoServer = "mongodb://"; if ($config['username']) { $mongoServer .= $config['username'] . ':' . $config['password'] . '@'; } $mongoServer .= $config['hostname']; if ($config['port']) { $mongoServer .= ':' . $config['port']; } $mongoServer .= '/' . $config['database']; $this->mongodb = new Manager($mongoServer); $this->database = $config['database']; $this->collection = $config['collection']; $this->bulk = new BulkWrite(); $this->writeConcern = new WriteConcern(WriteConcern::MAJORITY, 100); } public function query($where = [], $option = []) { $query = new Query($where, $option); $result = $this->mongodb->executeQuery("$this->database.$this->collection", $query); return json_encode($result); } public function count($where = []) { $command = new Command(['count' => $this->collection, 'query' => $where]); $result = $this->mongodb->executeCommand($this->database, $command); $res = $result->toArray(); $count = 0; if ($res) { $count = $res[0]->n; } return $count; } public function update($where = [], $update = [], $upsert = false) { $this->bulk->update($where, ['$set' => $update], ['multi' => true, 'upsert' => $upsert]); $result = $this->mongodb->executeBulkWrite("$this->database.$this->collection", $this->bulk, $this->writeConcern); return $result->getModifiedCount(); } public function insert($data = []) { $this->bulk->insert($data); $result = $this->mongodb->executeBulkWrite("$this->database.$this->collection", $this->bulk, $this->writeConcern); return $result->getInsertedCount(); } public function delete($where = [], $limit = 1) { $this->bulk->delete($where, ['limit' => $limit]); $result = $this->mongodb->executeBulkWrite("$this->database.$this->collection", $this->bulk, $this->writeConcern); return $result->getDeletedCount(); } }
Diese Syntax unterscheidet sich zu sehr von der vorherigen und es ist unpraktisch, zur PHP-MongoDB-Bibliothek zu wechseln
MongoDB-Bibliothek
1. Verbinden
Original
new MongoClient();
Neu
new MongoDB\Client();
Neu
Original
$collention->insert($array, $options);
Neu
$resultOne = $collention->insertOne($array, $options);//单 $lastId = $resultOne->getInsertedId(); $resultMany = $collention->insertMany($array, $options);//多 $count = $resultMany->getInsertedCount();
3. Ändern
Original
$collention->update($condition, [ '$set' => $values ,[ 'multiple' => true//多条,单条false ]);
Neu
$collection->updateOne( ['state' => 'ny'], ['$set' => ['country' => 'us']] ); $updateResult = $collection->updateMany( ['state' => 'ny'], ['$set' => ['country' => 'us']] ); $count = $updateResult->getModifiedCount();
4. Abfrage
Original
$cursor = $collection->find($condition, [ 'name' => true//指定字段 ]); $cursor->skip(5); $cursor->limit(5); $cursor->sort([ 'time' => -1 ]);
Neu
$cursor = $collection->find($condition, [ 'skip' => 5, 'limit' => 5, 'sort' => [ 'time' => -1 ],//排序 'projection' => [ 'name' => 1//指定字段 ] ]);
5. Löschen
Original
$collention->remove($condition, [ 'justOne' => false//删单条 ]); $collention->remove([]);//删所有
Neu
$result = $collention->deleteOne($condition, $options); $collention->deleteMany($condition, $options); $result->getDeletedCount();
Ergänzung
Einige Leute sind möglicherweise daran gewöhnt, Daten mit automatisch inkrementierten IDs ähnlich wie MySQL zu verarbeiten. In der Vergangenheit haben sie möglicherweise findAndModify( verwendet. ) Methode zum Abfragen und Ändern:
$collention->findAndModify([ '_id' => $tableName//我在自增表中用其它的表名作主键 ], [ '$inc' => ['id' => 1]//自增 ], [ '_id' => 0 ], [ 'new' => 1//返回修改后的结果,默认是修改前的 ]);
Wenn Sie jetzt die MongoDB-Bibliothek verwenden, muss Folgendes geändert werden:
$collention->findOneAndUpdate([ '_id' => $tableName ], [ '$inc' => ['id' => 1] ], [ 'projection' => ['id' => 1], 'returnDocument' => MongoDB\Operation\FindOneAndUpdate::RETURN_DOCUMENT_AFTER ]);
Ähnlich gibt es findOneAndDelete() findOneAndReplace() siehe Dokument
Das obige ist der detaillierte Inhalt vonInformationen zum Upgrade von PHP7 für den Betrieb von MongoDB. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!