Heim > Backend-Entwicklung > PHP7 > Informationen zum Upgrade von PHP7 für den Betrieb von MongoDB

Informationen zum Upgrade von PHP7 für den Betrieb von MongoDB

藏色散人
Freigeben: 2023-02-17 14:24:01
nach vorne
2959 Leute haben es durchsucht

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
        = [
            &#39;hostname&#39; => &#39;localhost&#39;,
            &#39;port&#39; => &#39;27017&#39;,
            &#39;username&#39; => &#39;&#39;,
            &#39;password&#39; => &#39;&#39;,
            &#39;database&#39; => &#39;test&#39;
        ];
    public function __construct($config) {
        $config = array_merge($this->defaultConfig, $config);
        $mongoServer = "mongodb://";
        if ($config[&#39;username&#39;]) {
            $mongoServer .= $config[&#39;username&#39;] . &#39;:&#39; . $config[&#39;password&#39;] . &#39;@&#39;;
        }
        $mongoServer .= $config[&#39;hostname&#39;];
        if ($config[&#39;port&#39;]) {
            $mongoServer .= &#39;:&#39; . $config[&#39;port&#39;];
        }
        $mongoServer .= &#39;/&#39; . $config[&#39;database&#39;];
        $this->mongodb = new Manager($mongoServer);
        $this->database = $config[&#39;database&#39;];
        $this->collection = $config[&#39;collection&#39;];
        $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([&#39;count&#39; => $this->collection, &#39;query&#39; => $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, [&#39;$set&#39; => $update], [&#39;multi&#39; => true, &#39;upsert&#39; => $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, [&#39;limit&#39; => $limit]);
        $result = $this->mongodb->executeBulkWrite("$this->database.$this->collection", $this->bulk, $this->writeConcern);
        return $result->getDeletedCount();
    }
}
Nach dem Login kopieren

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();
Nach dem Login kopieren

Neu

new MongoDB\Client();
Nach dem Login kopieren

Neu

Original

$collention->insert($array, $options);
Nach dem Login kopieren

Neu

$resultOne = $collention->insertOne($array, $options);//单
$lastId = $resultOne->getInsertedId();
$resultMany = $collention->insertMany($array, $options);//多
$count = $resultMany->getInsertedCount();
Nach dem Login kopieren

3. Ändern

Original

$collention->update($condition, [
    &#39;$set&#39; => $values
,[
    &#39;multiple&#39; => true//多条,单条false
]);
Nach dem Login kopieren

Neu

$collection->updateOne(
    [&#39;state&#39; => &#39;ny&#39;],
    [&#39;$set&#39; => [&#39;country&#39; => &#39;us&#39;]]
);
$updateResult = $collection->updateMany(
    [&#39;state&#39; => &#39;ny&#39;],
    [&#39;$set&#39; => [&#39;country&#39; => &#39;us&#39;]]
);
$count = $updateResult->getModifiedCount();
Nach dem Login kopieren

4. Abfrage

Original

$cursor = $collection->find($condition, [
    &#39;name&#39; => true//指定字段
]);
$cursor->skip(5);
$cursor->limit(5);
$cursor->sort([
    &#39;time&#39; => -1
]);
Nach dem Login kopieren

Neu

$cursor = $collection->find($condition, [
    &#39;skip&#39; => 5,
    &#39;limit&#39; => 5,
    &#39;sort&#39; => [
        &#39;time&#39; => -1
    ],//排序
    &#39;projection&#39; => [
        &#39;name&#39; => 1//指定字段
    ]
]);
Nach dem Login kopieren

5. Löschen

Original

$collention->remove($condition, [
    &#39;justOne&#39; => false//删单条
]);
$collention->remove([]);//删所有
Nach dem Login kopieren

Neu

$result = $collention->deleteOne($condition, $options);
$collention->deleteMany($condition, $options);
$result->getDeletedCount();
Nach dem Login kopieren

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([
    &#39;_id&#39; => $tableName//我在自增表中用其它的表名作主键
], [
    &#39;$inc&#39; => [&#39;id&#39; => 1]//自增
], [
    &#39;_id&#39; => 0
], [
    &#39;new&#39; => 1//返回修改后的结果,默认是修改前的
]);
Nach dem Login kopieren

Wenn Sie jetzt die MongoDB-Bibliothek verwenden, muss Folgendes geändert werden:

$collention->findOneAndUpdate([
    &#39;_id&#39; => $tableName
], [
    &#39;$inc&#39; => [&#39;id&#39; => 1]
], [
    &#39;projection&#39; => [&#39;id&#39; => 1],
    &#39;returnDocument&#39; => MongoDB\Operation\FindOneAndUpdate::RETURN_DOCUMENT_AFTER
]);
Nach dem Login kopieren

Ä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!

Verwandte Etiketten:
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage