2010-12-03 6 views
9

J'ai rencontré un problème. J'ai un tableau de mots, et j'utilise ces mots pour rechercher la base de données et correspondent à aucun document avec des champs correspondant à l'aide:

collection.find({"word":{"$in":words}}) 

Les travaux ci-dessus très bien, mais je veux être en mesure d'utiliser Regex. Le problème que j'ai maintenant est que l'un des mots dans le tableau a été orthographié accus au lieu de accuse, je veux que la requête find() retourne encore le document (enregistrement/ligne) relatif au mot accuse.

J'ai essayé ceci, qui ne fonctionne pas du tout, aucun résultat n'est retourné.

collection.find({"word":{"$in":{"$regex":words}}}) 

Chaque élément du tableau se lit avec ^ précédant le mot, par exemple ['^work', '^accus', '^planet']

Est-ce que je vais juste à ce sujet dans le mauvais sens? J'utilise Python en conjonction avec MongoDB en passant. Merci d'avance.

Répondre

9

Désolé pour la réponse tardive, il suffit de googler votre question. Vous devez utiliser une expression régulière, pas un tableau d'entre eux, comme:

'^[work|accus*|planet]' 
+0

Est-ce que ceci ('.find ({" word ": {" $ in ": {" $ regex ":"^quoi que ce soit. * $ "}}})') Fonctionne? Pas pour moi .. aucun résultat n'est retourné. – laggingreflex

+0

Les crochets ne doivent-ils pas être entre crochets, car les crochets correspondent à des caractères uniques? – synthomat

1

Utilisation de l'API de données Spring, on peut faire la requête comme suit:

// Code

Query query = new Query(); 
query.addCriteria(Criteria.where("words").in(Pattern.compile(regex-String))); 
find(query) 

// fin du code

cela trouvera tous les documents avec un champ tableau appelé "mots" avec l'élément dans ce tableau qui correspondent à la regex.

Cordialement

4

Vous ne pouvez pas utiliser $ regex dans une expression $, mais vous pouvez utiliser JS regex (le genre "/ regex /").

Des MongoDB docs: http://docs.mongodb.org/v2.2/reference/operator/query/regex/#in-expressions.

« Pour inclure une expression régulière dans un $ dans l'expression de la requête, vous pouvez utiliser des objets d'expression régulière JavaScript (ie/modèle /) Vous ne pouvez pas utiliser $ expressions opérateur regex à l'intérieur d'un $ in. "

BTW, je sais que c'est une réponse très tard, mais nous espérons qu'il servirai Queriers du futur ...

0

Selon Mongo docs la façon currect à cela le folllowing

var words = [/hello/, /^world/];// array of regex 
db.getCollection('word collection').find({"word" : {$in : words}}); 

Pour ce faire dans JS vous pouvez créer un tableau de RegEXp objets et passer ce tableau que la valeur de $in quelque chose comme ceci:

words = words.map(function(v){return new RegExp(v)});