我有一个查询,该查询从一个名为“意图”的集合中获取所有文档,然后运行查找并从另一个集合中获取有关这些意图的统计信息。
我需要做的是在查找之前删除其中一些意图。条件是它们的“名称”列是否包含我在列表中包含的字符串。
其中一些字符串由多个单词组成,它们也应忽略大小写。 (即:如果列表包含“产品”,则应从查询结果“产品”,“产品”,“产品”等中删除所有变体)
有人知道我如何实现这一目标吗?文本搜索似乎是行之有效的方法,但是我不相信我可以使用“不包括文本”。
这是我的atm,它很好用,减去了列表部分中的过滤项:
cursor = self.db.intents.aggregate([
{
'$match': {
'activity_provider_id': self.activity_provider_id,
}
},
{
'$lookup': {
'from': 'messages',
'let': {'name': '$name'},
'pipeline': [
{
'$match': {
'$expr': {
'$eq': ['$triggered_intent.id', '$$name']
}
},
},
{
'$match': {
'$expr': {
'$gte': ['$at', timestamp_from]
}
}
},
{
'$match': {
'$expr': {
'$lte': ['$at', timestamp_to],
}
}
},
],
'as': 'messages_with_intent'
}
},
{
'$replaceRoot': {
'newRoot': {
'name': '$name',
'display_name': '$display_name',
'occurrences': { '$size': '$messages_with_intent' }
}
}
},
{
'$sort': {
'occurrences': -1
}
},
{
'$limit': 10
}
])