根据属性是否包含文本从搜索结果中删除项目

时间:2019-04-11 05:03:52

标签: python-3.x mongodb pymongo

我有一个查询,该查询从一个名为“意图”的集合中获取所有文档,然后运行查找并从另一个集合中获取有关这些意图的统计信息。

我需要做的是在查找之前删除其中一些意图。条件是它们的“名称”列是否包含我在列表中包含的字符串。

其中一些字符串由多个单词组成,它们也应忽略大小写。 (即:如果列表包含“产品”,则应从查询结果“产品”,“产品”,“产品”等中删除所有变体)

有人知道我如何实现这一目标吗?文本搜索似乎是行之有效的方法,但是我不相信我可以使用“不包括文本”。

这是我的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
            }
        ])

0 个答案:

没有答案