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

PyMongo - valg af underdokumenter fra samling ved regex

Du har brug for en aggregeringspipeline, der matcher hvert underdokument separat, og derefter genføjer de matchende underdokumenter i arrays:

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

Jeg antager, at "col" er en variabel, der peger på dit PyMongo Collection-objekt. Dette udsender:

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

Præfikset "r" til strengen gør den til en Python "rå" streng for at undgå problemer med regex-kode. I dette tilfælde er regex bare "ab", så præfikset "r" er ikke nødvendigt, men det er god praksis nu, så du ikke laver en fejl i fremtiden.




  1. Arkitektur til login-system på MEAN stack?

  2. Lav dynamisk forespørgsel med Mongoose

  3. MongoDB - Projektering af et felt, der ikke altid eksisterer

  4. tidsserier og aggregeringsramme (mongo)