Sie benötigen eine Aggregationspipeline, die jedes Unterdokument separat abgleicht und dann die übereinstimmenden Unterdokumente wieder in Arrays zusammenfügt:
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'}
}
}])))
Ich gehe davon aus, dass "col" eine Variable ist, die auf Ihr PyMongo Collection-Objekt zeigt. Dies gibt aus:
[{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'}]}]
Das Präfix „r“ vor der Zeichenfolge macht sie zu einer „rohen“ Python-Zeichenfolge, um Probleme mit Regex-Code zu vermeiden. In diesem Fall ist die Regex nur "ab", also ist das Präfix "r" nicht notwendig, aber es ist jetzt eine gute Übung, damit Sie in Zukunft keinen Fehler machen.