sql >> Database >  >> NoSQL >> MongoDB

PyMongo - subdocumenten selecteren uit verzameling op regex

U hebt een aggregatiepijplijn nodig die met elk subdocument afzonderlijk overeenkomt, en voegt de overeenkomende subdocumenten vervolgens weer samen in 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'}
    }
}])))

Ik neem aan dat "col" een variabele is die naar je PyMongo Collection-object verwijst. Dit geeft het volgende weer:

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

Het voorvoegsel "r" van de tekenreeks maakt het een Python "onbewerkte" tekenreeks om problemen met regex-code te voorkomen. In dit geval is de regex gewoon "ab", dus het voorvoegsel "r" is niet nodig, maar het is nu een goede gewoonte, zodat u in de toekomst geen fouten maakt.




  1. MongoDB opgeslagen procedure-equivalent

  2. Node.js + mangoest bevriest knooppunt bij meer dan 100 resultaten

  3. Hoe te projecteren of een veld bestaat

  4. Mongodb $graphLookup bouw hiërarchie