Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erklärung, wie PHP7 die MongoDB-Fuzzy-Abfrage implementiert

Detaillierte Erklärung, wie PHP7 die MongoDB-Fuzzy-Abfrage implementiert

*文
*文Original
2018-01-03 11:26:402813Durchsuche

Wie implementiert man MongoDB-Fuzzy-Abfragen in PHP7? Ich glaube, dass die MongoDB-Fuzzy-Abfrageanweisung jedem bekannt ist. Dieser Artikel stellt hauptsächlich die Methode zur Implementierung von Fuzzy-Abfragen in MongoDB in PHP 7 vor. Der Artikel enthält eine detaillierte Einführung und Beispielcode, der für jeden einen gewissen Referenz- und Lernwert hat. Ich hoffe, es hilft allen.

Vorwort

In der tatsächlichen Entwicklung gibt es viele Szenarien, in denen die Fuzzy-Abfrage der MongoDB-Shell sehr einfach ist:

db.collection.find({'_id': /^5101/})

Der obige Satz ist die query_id, die mit „5101“ beginnt.

Fuzzy-Abfrage ist in der alten MogoDB recht einfach. Hier ist eine einfache Aufzeichnung, wie die Fuzzy-Abfrage funktioniert:

Befehlszeile:

db.letv_logs.find({"ctime":/uname?/i});

PHP-Betrieb

$query=array("name"=>new MongoRegex("/.*”.$name.".*/i"));
$db->find($query);

Im Folgenden geht es hauptsächlich um die Abfrage im neuen PHP-Treiber:

$query = new \MongoDB\Driver\Query('_id' => ['$regex' => '^5101']);
$this->getManager()->executeQuery($this->dbname . $this->collection, $query);

Das Obige ist die Implementierung der Fuzzy-Abfrage im neuen Treiber. Im Vergleich zum alten Treiber beschwere ich mich wirklich über den Funktionsnamen ist zu lang. . . Es ist fast mehr als die Funktionsnamen von Swift. Darüber hinaus wurden viele Funktionen des alten Treibers aus dem neuen Treiber entfernt. Obwohl für den Betrieb eine mongodb php library-Klassenbibliothek bereitgestellt wird, befinden sich in dieser Bibliothek mehr als 60 Dateien, manchmal mehr als meine Projektdateien. Was ist daran falsch? Ich empfehle, selbst eine Treiberklasse zur Verwendung zu kapseln.

Die obige Schimpftirade ist etwas abseits des Themas. Zusätzlich zur direkten Fuzzy-Abfrage müssen Sie bei der Verwendung mit $in oder $nin besonders aufpassen:

$filter = ['_id' => ['$in' => ['$regex' => '^5101']]];

Wenn Sie den Filter wie oben beschrieben schreiben, wird während der Ausführung ein schwerwiegender Fehler ausgegeben:

PHP Fatal error: Uncaught MongoDB\Driver\Exception\ConnectionException: $in needs an array in filename

Es heißt, dass in $in ein Array bereitgestellt werden muss, also ändern wir das oben $filter Als nächstes besorgen Sie sich ein Array dafür:

$filter = ['_id' => ['$in' => [['$regex' => '^5101']]];

Aber leider können wir immer noch nicht erfolgreich das gewünschte Ergebnis erzielen:

PHP Fatal error: Uncaught MongoDB\Driver\Exception\ConnectionException: cannot nest $ under $in in filename

Hier heißt es, dass $ nicht in $in erscheinen kann, was soll ich tun? Um Fuzzy-Matching in $in oder $nin zu verwenden, müssen Sie tatsächlich eine Instanz der MongoDBBSONRegex-Klasse verwenden:

$filter = ['_id' => ['$in' => [new \MongoDB\BSON\Regex('^5101','i')]]];

Dieses Mal haben wir endlich das gewünschte Ergebnis erhalten .

Verwandte Empfehlungen:

php implementiert die benutzerdefinierte Mongodb-Generierung einer sich selbst erhöhenden ID

Ausführungsplan für die MongoDB-Ansicht

So verwenden Sie den MongoDB-Index

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung, wie PHP7 die MongoDB-Fuzzy-Abfrage implementiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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