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!