Avant-propos
De nombreux utilisateurs utilisent PHP+MongoDB car MongoDB est très pratique pour stocker des données non structurées. En PHP5 et avant, deux extensions officielles étaient fournies, Mongo et MongoDB. Mongo fonctionne sur des catégories basées sur plusieurs classes principales telles que MongoClient. Il est très pratique à encapsuler, donc les extensions Mongo sont essentiellement choisies.
Pour plus de détails, veuillez consulter le manuel officiel : https://www.php.net/manual/zh/book.mongo.php
Cependant, avec la mise à niveau de PHP5 vers PHP7, Mongo n'est plus officiellement pris en charge. L'extension ne prend en charge que MongoDB, et l'amélioration des performances de PHP7 est énorme, ce qui empêche les gens d'abandonner, alors comment remplacer Mongo par MongoDB est devenu un problème urgent à résoudre. MongoDB introduit des espaces de noms, mais l'encapsulation fonctionnelle est très mauvaise. Si vous devez utiliser des extensions natives, cela signifie presque écrire des instructions Mongo natives. Cette idée va à l'encontre de l'idée d'ORM simplifiant les problèmes de syntaxe causés par les opérations DB IO et se concentrant sur l'optimisation logique.
Pour plus de détails, veuillez également vous référer au manuel officiel : https://www.php.net/manual/zh/set.mongodb.php
Dans cette situation, les responsables de MongoDB ne pouvaient pas aide mais Afin de faciliter l'utilisation et d'augmenter la part de marché, une bibliothèque basée sur l'extension MongoDB a été lancée : https://github.com/mongodb/mongo-php-library
Pour une documentation détaillée de cette bibliothèque, veuillez consulter : https://docs.mongodb.com/php-library/current/reference/
Pilote MongoDB
Si vous utilisez le pilote d'origine, la valeur approximative la syntaxe est la suivante :
<?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(); } }
Cette syntaxe est trop différente d'avant et il n'est pas pratique de la modifier. Passez à la bibliothèque PHP MongoDB
Bibliothèque MongoDB
<🎜. >1. Connectez
Originalnew MongoClient();
new MongoDB\Client();
Nouveau
Original$collention->insert($array, $options);
$resultOne = $collention->insertOne($array, $options);//单 $lastId = $resultOne->getInsertedId(); $resultMany = $collention->insertMany($array, $options);//多 $count = $resultMany->getInsertedCount();
3. Modifier
Original$collention->update($condition, [ '$set' => $values ,[ 'multiple' => true//多条,单条false ]);
$collection->updateOne( ['state' => 'ny'], ['$set' => ['country' => 'us']] ); $updateResult = $collection->updateMany( ['state' => 'ny'], ['$set' => ['country' => 'us']] ); $count = $updateResult->getModifiedCount();
4. Requête
Original$cursor = $collection->find($condition, [ 'name' => true//指定字段 ]); $cursor->skip(5); $cursor->limit(5); $cursor->sort([ 'time' => -1 ]);
$cursor = $collection->find($condition, [ 'skip' => 5, 'limit' => 5, 'sort' => [ 'time' => -1 ],//排序 'projection' => [ 'name' => 1//指定字段 ] ]);
5. Supprimer
Original$collention->remove($condition, [ 'justOne' => false//删单条 ]); $collention->remove([]);//删所有
$result = $collention->deleteOne($condition, $options); $collention->deleteMany($condition, $options); $result->getDeletedCount();
Supplément
Certaines personnes peuvent être habituées à traiter des données avec des identifiants à incrémentation automatique similaires à MySQL. Dans le passé, elles ont peut-être utilisé findAndModify(. ) méthode pour interroger et modifier :$collention->findAndModify([ '_id' => $tableName//我在自增表中用其它的表名作主键 ], [ '$inc' => ['id' => 1]//自增 ], [ '_id' => 0 ], [ 'new' => 1//返回修改后的结果,默认是修改前的 ]);
$collention->findOneAndUpdate([ '_id' => $tableName ], [ '$inc' => ['id' => 1] ], [ 'projection' => ['id' => 1], 'returnDocument' => MongoDB\Operation\FindOneAndUpdate::RETURN_DOCUMENT_AFTER ]);
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!