Bạn cần một đường dẫn tổng hợp khớp với từng tài liệu con riêng biệt, sau đó nối lại các tài liệu con phù hợp thành mảng:
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'}
}
}])))
Tôi giả sử "col" là một biến trỏ đến đối tượng Bộ sưu tập PyMongo của bạn. Kết quả này:
[{u'_id': u'1',
u'docs': [{u'key': u'5678', u'value': u'abgh'}]},
{u'_id': u'0',
u'docs': [{u'key': u'1234', u'value': u'abcd'},
{u'key': u'5678', u'value': u'abef'}]}]
Tiền tố "r" của chuỗi làm cho nó trở thành chuỗi "thô" trong Python để tránh mọi rắc rối với mã regex. Trong trường hợp này, regex chỉ là "ab" vì vậy tiền tố "r" là không cần thiết, nhưng thực hành tốt ngay bây giờ để bạn không mắc lỗi trong tương lai.