2010-05-21 8 views
2

Donc, j'ai décidé de mouiller mes pieds avec MongoDB et j'adore ça jusqu'à maintenant. Cela semble très rapide et flexible ce qui est génial. Mais, je continue à travers la courbe d'apprentissage initiale et en tant que tel, je passe des heures à creuser pour obtenir des informations sur les choses les plus élémentaires.Effectuer une recherche insensible à la casse sur un tableau dans MongoDB?

J'ai effectué des recherches dans la documentation en ligne de MongoDB et j'ai passé des heures à parcourir les pages sans aucune mention de cela. Je sais que Mongo est encore assez récent (v1.x), donc cela explique pourquoi il n'y a pas encore beaucoup d'informations. J'ai même essayé de chercher des livres sur Mongo sans trop de chance. Alors oui, j'ai essayé RTM sans chance, alors, je me tourne vers vous. J'ai un tableau de divers hashtags imbriqués dans chaque document (c.-à-d.: #apples, #oranges, #Apples, #APPLES) et je voudrais effectuer une recherche insensible à la casse() pour accéder à tous les documents contenant des pommes dans tout les cas. Il semble que find supporte une certaine regex avec/i, mais je n'arrive pas à l'obtenir non plus.

De toute façon, j'espère que c'est une réponse rapide pour quelqu'un.

Voici mon appel existant en PHP qui est sensible à la casse:

$cursor = $collection->find(array("hashtags" => array("#".$keyword)))->sort(array('$natural' => -1))->limit(10); 

aide?

Répondre

0

Je soupçonne que votre requête ne retourne pas ce que vous voulez vraiment ...

Si vous

db.col.find({ some_array_field: ["item1", "item2"] }); 

alors il sera seulement documents de match qui ont EXACTEMENT ces deux éléments dans some_array_field. Donc, s'il y a un document avec des hashtags [item1, item2], cela correspondra, mais un document avec des tags [item1, item2, item3] ne correspondra pas.

Vous pouvez utiliser l'argument $ tout comme décrit dans cet article:

How do you do an AND query on an array in mongodb?

par exemple

db.col.find({ some_array_field: { $all : ["item1", "item2"] } }); 

ou:

db.col.find({ some_array_field: "item1", some_array_field: "item2" }); 

Cette distinction complète-documents match et match partiel était vraiment déroutant dans MongoDB pour moi au début.

0

ici est un exemple pour insensible à la casse recherche dans mongodb avec php

$search_string='baR'; 

$searchQuery = array(
      '$or' => array(
       array(
        'field1' => new MongoRegex("/^$search_string/i"), 
        ), 
       array(
        'field2' => new MongoRegex("/^$search_string/i"), 
        ), 
       ) 
      ); 

$cursor = $customers->find($searchQuery); 

Espoirs cette aide tout.

+0

Je pense que vous voulez dire: 'new MongoRegex ("/^ search_string $/i ")', n'est-ce pas? – aymericbeaumet

Questions connexes