2012-09-15 9 views
6

pymongo mi tiri un errore quando si cerca di eseguire query ed elementi da tagscome eseguire una query di un elemento da un elenco nel pymongo

db.users.find({"pseudo":"alucaard"}).distinct("produit_up") 
Out[1]: 
[{u'abus': 0, 
    u'avctype': u'image/jpeg', 
    u'date': u'2012-09-15', 
    u'description': u'le fameux portable solide', 
    u'id': u'alucaard134766932677', 
    u'namep': u'nokia 3310', 
    u'nombre': 1, 
    u'orientation': u'portrait', 
    u'photo': ObjectId('5053cd4e3a5f3a0990da8a61'), 
    u'prix': 1000, 
    u'tags': [u'solide', u'le', u'fameux', u'portable'], 
    u'vendu': False}] 

list(db.users.find({"solide":{"$in":{"document_up.tags"}}})) 

Traceback (most recent call last): 
File "C:\Python27\lib\site-packages\IPython\core\interactiveshell.py", line 2746, in run_code exec code_obj in self.user_global_ns, self.user_ns 
File "<ipython-input-1-8dff98261d7a>", line 1, in <module> 
list(db.users.find({"solide":{"$in":{"document_up.tags"}}})) 
File "C:\Python27\lib\site-packages\pymongo\cursor.py", line 778, in next 
if len(self.__data) or self._refresh(): 
File "C:\Python27\lib\site-packages\pymongo\cursor.py", line 729, in _refresh 
self.__uuid_subtype)) 
InvalidDocument: Cannot encode object: set(['document_up.tags']) 

NB: solo un trucco per gli utenti pymongo, se gli utenti hanno una dimensione limitata nel testo, basta convertirlo utilizzando un set, il convertito il set a un elenco: ad esempio:

phrase = "hi you, how are you, am i using this" 
  1. primo passo: rimuovere virgola o punti per evitare di regolare l'espressione searc hs.
  2. in secondo luogo, utilizzare phrase.split() per dividere le parole.
  3. aggiungere questo a set per evitare parole doppie.
  4. convertire il set a un list
  5. sarà una buona idea per fare un Dictionnary che contiene alcune parole che verranno rimossi dalla lista, come "come", "tu", "me", ... ma farà molti calcoli.

spero che questa idea possa essere d'aiuto.

risposta

22

La tua richiesta è sbagliata. Prova qualcosa più vicino a:

list(db.users.find({"document_up.tags":{"$in":["solide"]}})) 
+0

quindi era l'inverso ?! perché in logica, cerchiamo una parola se è in una lista, e non una lista se è in una parola? –

+2

@AbdelouahabPp In realtà in Mongo è molto simile a SQL in questo modo con 'field_name IN (1,2,3)' – Sammaye

+0

mi dispiace perché ho "saltato" direttamente su nosql, dident ha ottenuto il passo sql: p grazie ancora –

Problemi correlati