2011-08-06 5 views
2

J'essaie de combiner $ regex et $ in pour faire une recherche simple.

Par exemple, j'ai une requête utilisateur de ce genre:

$user_query = "for focus red"; 

Dans ma collection de MongoDB pour chaque document que j'ai un champ de mots-clés. Je veux obtenir le document où les mots-clés sur le terrain est:

{ 
    keywords : 
     [0] => ford, 
     [1] => focus, 
     [2] => red 
} 

Comme vous pouvez le voir l'utilisateur a fait une erreur et tapé « pour » au lieu de « Ford ».

je peux obtenir les résultats avec $in si les types d'utilisateurs Ford, mais je ne sais pas comment combiner $regex et $in, je l'ai regardé mongodb doc et php doc mongo.

+0

Quel est 'regex' et $' in' de $? Veuillez ajouter le code correspondant à votre question pour en savoir plus sur ces variables ou, s'il fait partie d'une requête mongo, veuillez afficher la requête et le code associé à la requête. – hakre

+5

@hakre '$ in' et' $ regex' ne sont pas des variables PHP, ce sont des opérateurs de recherche pour les requêtes MongoDB. Vous lui demandez de répondre à sa propre question. Il a dit qu'il ne sait pas comment écrire la requête. –

Répondre

4

Il est mon extrait rapide:

$user_query = preg_replace("/[[:blank:]]+/"," ", $user_query); 
$arr_query = explode(' ', $user_query); 

if (count($arr_query) > 1) { 
    $tmp = array(); 

    foreach ($arr_query as $q) { 
     $tmp[] = new MongoRegex("/". $q ."/"); 
    } 

    $who['keywords'] = array('$in' => $tmp); 

} else { 
    $who['keywords'] = new MongoRegex("/". $user_query ."/"); 
} 

$db->collection->find($who); 
+0

btw, vous pouvez remplacer $ in par $ all par des fins – Janis

0

Je ne suis pas en utilisant mongo PHP, mais je voudrais faire comme ceci: (je suis en utilisant la syntaxe shell mongo)

//find everything inside test that was either written by someone or text contains the word "and" 
db.test.find({ $or : [ { "keywords" : { $in: ["Ford"] } } , { "keywords" : { $regex: "for.*" } } ] }) 

Je suis sûr que vous pouvez traduire dans dans la structure PHP appropriée.

+0

L'utilisation de $ ou est intéressante, mais ce n'est pas mon problème. La question est à propos de $ regex, ici vous répondez seulement pour un mot-clé pas toute la requête. – Flyingbeaver

+0

@Flyingbeaver Vous pouvez ajouter autant de mots-clés que nécessaire. Ce ne sont que des tableaux (en Mongo ainsi qu'en PHP) donc vous pouvez écrire '$ in: [" Ford "," focus "," red "]' – DrColossos