MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

PyMongo - sélection de sous-documents de la collection par regex

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.