2012-09-15 14 views
6

pymongo wyrzuca mi błąd podczas próby kwerendy i pierwiastek z tagsjak kwerendy elementu z listy w 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']) 

Uwaga: tylko sztuczka dla użytkowników pymongo, jeśli użytkownicy mają ograniczony rozmiar w tekście, po prostu przekształcić go za pomocą ustawiony, konwersji zestawu do listy: na przykład:

phrase = "hi you, how are you, am i using this" 
  1. pierwszy krok: usunięcie przecinka lub kropki, aby uniknąć regularnego searc ekspresyjną hs.
  2. sekunda, użyj phrase.split(), aby podzielić słowa.
  3. dodaj to do set, aby uniknąć duplikowania słów.
  4. przekonwertować zestaw do list
  5. będzie to dobry pomysł, aby dokonać dictionnary że zawierający pewne słowa, które zostaną usunięte z listy, jak „jak”, „ty”, „ja”, ... ale spowoduje to wiele obliczeń.

nadzieję, że ten pomysł pomoże.

Odpowiedz

22

Twoje zapytanie jest nieprawidłowe. Spróbuj czegoś bliżej do:

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

, więc było odwrotnie ?! ponieważ w logice szukamy słowa, jeśli jest ono na liście, a nie listy, jeśli jest w słowie? –

+2

@AbdelouahabPp Rzeczywiście w Mongo jest to podobne do SQL w ten sposób z 'field_name IN (1,2,3)' – Sammaye

+0

Przykro mi, ponieważ "przeskoczyłem" bezpośrednio do nosql, dident dostałem krok sql: p jeszcze raz dziękuję –