MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

PyMongo- wybieranie poddokumentów z kolekcji przez regex

Potrzebujesz potoku agregacji, który dopasowuje każdy poddokument osobno, a następnie ponownie łączy pasujące poddokumenty w tablice:

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

Zakładam, że "col" jest zmienną wskazującą na Twój obiekt kolekcji PyMongo. To wyprowadza:

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

Prefiks "r" w łańcuchu sprawia, że ​​jest to "surowy" łańcuch Pythona, aby uniknąć problemów z kodem regex. W tym przypadku wyrażenie regularne to po prostu „ab”, więc przedrostek „r” nie jest konieczny, ale jest to teraz dobra praktyka, aby nie popełnić błędu w przyszłości.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Dlaczego wiosenne dane mongo nie wracają na pole, mając czas?

  2. Wiele do wielu aktualizacji w MongoDB bez transakcji

  3. mangusta wymusza unikalny atrybut na właściwości dokumentu podrzędnego

  4. Kiedy osadzić dokumenty w Mongo DB

  5. Optymalizacja wydajności schematu MongoDB