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