Mongoengine:使用 __not__contains 查询但使用列表而不是字符串
Mongoengine: Querying using __not__contains but with lists instead of string
我有一个要从新闻数据库的 'title' 字段中过滤掉的主题列表。
我希望解决方案做与 __contains
相反的事情,但包含字符串,我想给它一个列表,它将过滤掉所有包含给定单词的新闻在列表中。
示例:
blacklist=["Facebook", "Apple"]
我想使用此列表并过滤掉所有标题包含 blacklist
中单词的新闻。
编辑:我想我没有在上面的几行中阐明我的 objective。
使用上面声明的blacklist
,在新闻列表中,排除blacklist
中'contains'个词的所有新闻。 (注意:我想使用 'list' 来解决它,因为这个列表即 blacklist
可能包含很多单词。)
例如
“Facebook 对隐私不友好”= 排除
“Apple 可能对隐私友好”= 排除
“比特币市场崩盘”=不排除
您可以通过 MongoEngine 的 Q class
将多个条件与 AND/OR 组合
from mongoengine import connect, Document, StringField, Q
connect()
class TestDoc(Document):
s = StringField()
TestDoc(s="Facebook is this").save()
TestDoc(s="and Twitter is that").save()
TestDoc(s="Something else").save()
query = Q(s__contains="Facebook") | Q(s__contains="Twitter")
TestDoc.objects(query) # finds the 2 objects
# or dynamically from a list...
my_fancy_list = ['Facebook', 'Twitter']
dynamic_query = Q(s__contains=my_fancy_list.pop())
while my_fancy_list:
dynamic_query |= Q(s__contains=my_fancy_list.pop())
TestDoc.objects(dynamic_query) # finds the 2 objects
我有一个要从新闻数据库的 'title' 字段中过滤掉的主题列表。
我希望解决方案做与 __contains
相反的事情,但包含字符串,我想给它一个列表,它将过滤掉所有包含给定单词的新闻在列表中。
示例:
blacklist=["Facebook", "Apple"]
我想使用此列表并过滤掉所有标题包含 blacklist
中单词的新闻。
编辑:我想我没有在上面的几行中阐明我的 objective。
使用上面声明的blacklist
,在新闻列表中,排除blacklist
中'contains'个词的所有新闻。 (注意:我想使用 'list' 来解决它,因为这个列表即 blacklist
可能包含很多单词。)
例如 “Facebook 对隐私不友好”= 排除
“Apple 可能对隐私友好”= 排除
“比特币市场崩盘”=不排除
您可以通过 MongoEngine 的 Q class
将多个条件与 AND/OR 组合from mongoengine import connect, Document, StringField, Q
connect()
class TestDoc(Document):
s = StringField()
TestDoc(s="Facebook is this").save()
TestDoc(s="and Twitter is that").save()
TestDoc(s="Something else").save()
query = Q(s__contains="Facebook") | Q(s__contains="Twitter")
TestDoc.objects(query) # finds the 2 objects
# or dynamically from a list...
my_fancy_list = ['Facebook', 'Twitter']
dynamic_query = Q(s__contains=my_fancy_list.pop())
while my_fancy_list:
dynamic_query |= Q(s__contains=my_fancy_list.pop())
TestDoc.objects(dynamic_query) # finds the 2 objects