2012-08-22 4 views
0

Je suis en train d'interroger la collection de MongoDB comme ci-dessous ..requête MongoDB en utilisant chaîne personnalisée en python

>>> db.ds.find({"from":{'$regex':'Pooja'}}).count() 
18 

Mais quand je suis AJOUT DE cette même requête avec chaîne personnalisée, il me donne une erreur ..

>>> a = 'Pooja' 
>>> querystring = '' 
>>> querystring = querystring+"'from':{'$regex':"+a+"}" 
>>> querystring 
"'from':{'$regex':Pooja}" 
>>> db.ds.find({querystring}).count() 
SyntaxError: invalid syntax 
>>> 

J'ai vraiment besoin de plus d'un paramètre dans querystring explicitement, donc je l'utilise de cette façon. Quelqu'un peut-il m'aider avec ça?

Répondre

1

Votre code contient des erreurs graves.

d'abord:

db.ds.find({querystring}).count() # SyntaxError here 

Le problème que cette ligne donne SyntaxError parce {object} syntaxe est un littéral pour set type intégré, qui est disponible depuis la version Python 2.7.x, donc, ici vous » essayez de créer un ensemble composé d'une chaîne:

{object} # creates set since Python 2.7 
{object1: object2} # creates dict (object1 should be [hashable][1]) 

Voyons voir un exemple de création situé dans Python 2.7:

s = {1, 2, 3} # Creating set of three unique elements ({} - set literal) 
d = {1: 'a', 2: 'b'} # Creating dict of number->letters ({:} - dict literal) 

La deuxième chose est que le pilote MongoDB Python (je suppose que vous utilisez Pymongo) n'accepte pas les chaînes comme requêtes. Il a sa propre API et toutes les requêtes sont effectuées via dict s représentant des objets JSON (notez que Mongo stocke tous les objets à l'intérieur de la représentation binaire de JSON appelée BSON).

Alors, rappelez-vous du premier problème, lorsque vous essayez de créer set au lieu de dict).

Conclusion:

  1. Utilisez dict s pour créer Pymongo appropriées requêtes.
  2. Créer correctement des dictionnaires (pas des ensembles).
+0

Je l'ai fait avec l'approche du dictionnaire, Merci pour cela. Mais pouvez-vous élaborer plus avec "SyntaxError, car la syntaxe {object} est un littéral pour le type prédéfini" –

+0

Réponse mise à jour, mais il vaut mieux se référer à la documentation python dans les ensembles: http://docs.python.org/library /sets.html –

Questions connexes