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

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

藏色散人
藏色散人nach vorne
2020-04-18 13:22:052753Durchsuche

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

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, [
    &#39;$set&#39; => $values
,[
    &#39;multiple&#39; => true//多条,单条false
]);

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

4. Abfrage

Original

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

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//指定字段
    ]
]);

5. Löschen

Original

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

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

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

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen