pymongo
的元素时, tags
会引发错误
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'])
注意:对于pymongo用户来说,这只是一个技巧,如果你的用户在文本中的大小有限,只需使用一组转换它,将该组转换为列表: 例如:
phrase = "hi you, how are you, am i using this"
phrase.split()
分割单词。set
以避免重复的字词。list
答案 0 :(得分:25)
您的查询错误。尝试更贴近的事情:
list(db.users.find({"document_up.tags":{"$in":["solide"]}}))
答案 1 :(得分:0)
9 年后,我在寻找类似答案时偶然发现了此页面。尽管有投票,但由于唯一的其他答案似乎很可疑,因此我将其添加为其他访问者的资源。
这个参考似乎很合适:https://docs.mongodb.com/manual/tutorial/query-arrays/#query-an-array-for-an-element
<块引用>要查询数组字段是否至少包含一个具有指定值的元素,请使用过滤器 { <field>: <value> }
,其中 <value>
是元素值。
以下示例查询所有文档,其中标签是包含字符串“red”作为其元素之一的数组:
cursor = db.inventory.find({"tags": "red"})
明确地,您当前可以使用 list(db.users.find({"document_up.tags":"solide"}))
,因为尝试将单个值与数组匹配会隐式返回包含该值(至少一个实例)的数组的记录。该参考资料对特定案例进行了非常有用的详细说明。