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

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

*文
Freigeben: 2023-03-19 07:08:01
Original
2878 Leute haben es durchsucht

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/})
Nach dem Login kopieren

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

PHP-Betrieb

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

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

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']]];
Nach dem Login kopieren

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

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']]];
Nach dem Login kopieren

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

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

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!

Verwandte Etiketten:
Quelle:php.cn
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