MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

PyMongo – Auswählen von Unterdokumenten aus der Sammlung durch Regex

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.