6
pymongo
mi tiri un errore quando si cerca di eseguire query ed elementi da tags
come 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"
- primo passo: rimuovere virgola o punti per evitare di regolare l'espressione searc hs.
- in secondo luogo, utilizzare
phrase.split()
per dividere le parole. - aggiungere questo a
set
per evitare parole doppie. - convertire il set a un
list
- 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.
quindi era l'inverso ?! perché in logica, cerchiamo una parola se è in una lista, e non una lista se è in una parola? –
@AbdelouahabPp In realtà in Mongo è molto simile a SQL in questo modo con 'field_name IN (1,2,3)' – Sammaye
mi dispiace perché ho "saltato" direttamente su nosql, dident ha ottenuto il passo sql: p grazie ancora –