Vous avez besoin d'un pipeline d'agrégation qui correspond à chaque sous-document séparément, puis rejoint les sous-documents correspondants dans des tableaux :
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'}
}
}])))
Je suppose que "col" est une variable pointant vers votre objet PyMongo Collection. Cela affiche :
[{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'}]}]
Le préfixe "r" de la chaîne en fait une chaîne Python "brute" pour éviter tout problème avec le code regex. Dans ce cas, la regex est juste "ab" donc le préfixe "r" n'est pas nécessaire, mais c'est une bonne pratique maintenant pour ne pas faire d'erreur à l'avenir.