आपको एक एकत्रीकरण पाइपलाइन की आवश्यकता है जो प्रत्येक उप-दस्तावेज़ से अलग से मेल खाती है, फिर मिलान करने वाले उप-दस्तावेज़ों को सरणियों में फिर से जोड़ती है:
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'}
}
}])))
मुझे लगता है कि "कॉल" आपके पायमोंगो संग्रह ऑब्जेक्ट को इंगित करने वाला एक चर है। यह आउटपुट:
[{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'}]}]
स्ट्रिंग के लिए "आर" उपसर्ग इसे रेगेक्स कोड के साथ किसी भी परेशानी से बचने के लिए एक पायथन "कच्चा" स्ट्रिंग बनाता है। इस मामले में रेगेक्स सिर्फ "एबी" है इसलिए "आर" उपसर्ग आवश्यक नहीं है, लेकिन अब यह अच्छा अभ्यास है ताकि आप भविष्य में कोई गलती न करें।