Maison  >  Article  >  développement back-end  >  Explication détaillée de la façon dont PHP7 implémente la requête floue MongoDB

Explication détaillée de la façon dont PHP7 implémente la requête floue MongoDB

*文
*文original
2018-01-03 11:26:402813parcourir

Comment implémenter la requête floue MongoDB en php7 ? Je pense que l'instruction de requête floue de MongoDB est familière à tout le monde. Cet article présente principalement la méthode d'implémentation des requêtes floues dans MongoDB en PHP 7. L'article donne une introduction détaillée et un exemple de code, qui a une certaine valeur de référence et d'apprentissage pour tout le monde. J'espère que cela aide tout le monde.

Avant-propos

Dans le développement réel, il existe de nombreux scénarios dans lesquels la requête floue du shell MongoDB est très simple :

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

La phrase ci-dessus est le query_id commençant par « 5101 ».

La requête floue est assez simple dans l'ancien MogoDB. Voici un simple enregistrement de la façon d'utiliser une requête floue :

Ligne de commande :

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

Opération php

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

Ce qui suit parle principalement de la façon d'interroger dans le nouveau pilote PHP :

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

Ce qui précède est l'implémentation de la requête floue dans le nouveau pilote. Pour être honnête, je me plains vraiment de ce nouveau pilote. Par rapport à l'ancien pilote, le nom de la fonction. est trop long. . . C'est presque plus que les noms de fonctions de Swift. De plus, de nombreuses fonctions de l’ancien pilote ont été supprimées du nouveau pilote. Bien qu'une bibliothèque de classes mongodb php library soit fournie pour le fonctionnement, il y a plus de 60 fichiers dans cette bibliothèque, parfois plus que mes fichiers de projet. Je recommande d’encapsuler vous-même une classe Driver pour l’utiliser.

Le discours ci-dessus est un peu hors sujet. En plus de la requête floue directe, vous devez faire particulièrement attention lorsque vous l'utilisez avec $in ou $nin :

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

Si vous écrivez le filtre comme ci-dessus, une erreur fatale sera générée lors de l'exécution :

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

Il est indiqué qu'un tableau doit être fourni dans $in, modifions donc le ci-dessus $filter Ensuite, obtenez un tableau pour cela :

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

Mais malheureusement, nous ne parvenons toujours pas à obtenir le résultat souhaité avec succès :

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

Ici, il est dit que $ ne peut pas apparaître dans $in, que dois-je faire ? En fait, pour utiliser la correspondance floue dans $in ou $nin, vous devez utiliser une instance de la classe MongoDBBSONRegex :

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

Cette fois, nous avons finalement obtenu le résultat souhaité .

Recommandations associées :

php implémente la génération personnalisée Mongodb d'ID à croissance automatique

Plan d'exécution de la vue MongoDB

Comment utiliser l'index MongoDB

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn