MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

PyMongo:selezione di documenti secondari dalla raccolta tramite regex

È necessaria una pipeline di aggregazione che corrisponda a ciascun documento secondario separatamente, quindi riunisca nuovamente i documenti secondari corrispondenti in matrici:

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'}
    }
}])))

Presumo che "col" sia una variabile che punta al tuo oggetto Collezione PyMongo. Questo produce:

[{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'}]}]

Il prefisso "r" della stringa la rende una stringa "grezza" di Python per evitare problemi con il codice regex. In questo caso la regex è solo "ab", quindi il prefisso "r" non è necessario, ma è una buona pratica ora in modo da non commettere errori in futuro.