2011-08-11 8 views
3

Je veux faire une requête mongodb floue en utilisant pymongo.comment faire une requête floue dans Mongodb en utilisant pymongo?

cond = {'date':'/.*2011-8-11.*/'} 
coll.find(cond).count() return 0; 

mais je fais cette requête directement sur Mongodb return 25; Y a-t-il un problème dans ma requête?

+0

Notez que ce n'est pas vraiment une requête floue ... c'est une correspondance exacte, à la place. Une recherche floue aurait été de pouvoir établir une proximité minimale acceptable (ou distance maximale) de toute sorte, par exemple avec l'opérateur ~ dans solr (terme ~ ou terme ~ 0.75 ...). Je pense que ce n'est pas possible non plus avec regex ni mongoDB, malheureusement. – cedbeu

Répondre

5

Pour rechercher avec les expressions régulières de pymongo, vous devez utiliser un objet d'expression régulière python, pas une chaîne avec des barres obliques. Pour votre requête ci-dessus, la syntaxe pymongo serait:

import re 
# assume connection is set up, and db 
# is a pymongo.database.Database instance 
date_re = re.compile(r'2011-8-11') 
db.collection.find({'date': date_re}) 

Notez également que vous n'avez pas besoin le caractère . (soit dans la syntaxe pymongo ou la syntaxe shell mongo), à moins que vous ancrer votre expression régulière en utilisant ^ ou $.

+9

Vous pouvez également éviter la surcharge de la création d'un objet regex en faisant 'db.collection.find ({'date': {'$ regex': '2011-8-11'}})'. – TkTech

Questions connexes