PyMongo通过regex从集合中选择子文档

2024-09-29 17:22:43 发布

您现在位置:Python中文网/ 问答频道 /正文

以以下集合为例:

{
    '_id': '0',
    'docs': [
        {'value': 'abcd', 'key': '1234'},
        {'value': 'abef', 'key': '5678'}
    ]
}
{
    '_id': '1',
    'docs': [
        {'value': 'wxyz', 'key': '1234'},
        {'value': 'abgh', 'key': '5678'}
    ]
}

我希望能够只选择'docs'列表下的子文档,其中'value'包含字符串'ab'。我希望得到的是以下收藏:

^{pr2}$

因此,过滤掉不匹配的子文档。在


Tags: key字符串文档iddocs列表abvalue
1条回答
网友
1楼 · 发布于 2024-09-29 17:22:43

您需要一个分别匹配每个子文档的聚合管道,然后将匹配的子文档重新联接到数组中:

from pprint import pprint
from bson import Regex

regex = Regex(r'ab')
pprint(list(col.aggregate([{
    '$unwind': '$docs'
}, {
    '$match': {'docs.value': regex}
}, {
    '$group': {
        '_id': '$_id',
        'docs': {'$push': '$docs'}
    }
}])))

我假设“col”是指向PyMongo集合对象的变量。该输出:

^{pr2}$

字符串的“r”前缀使其成为Python“raw”字符串,以避免正则表达式代码出现任何问题。在本例中,regex只是“ab”,所以“r”前缀是不必要的,但是现在这是一个很好的做法,这样以后就不会出错了。在

相关问题 更多 >

    热门问题