MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

PyMongo - избиране на поддокументи от колекция чрез регулярен израз

Имате нужда от конвейер за агрегиране, който съвпада с всеки поддокумент поотделно, след което отново обединява съответстващите поддокументи в масиви:

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

Предполагам, че "col" е променлива, сочеща към вашия обект PyMongo Collection. Това извежда:

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

Префиксът "r" към низа го прави "суров" низ на Python, за да се избегнат проблеми с регулярния израз. В този случай регулярният израз е само "ab", така че префиксът "r" не е необходим, но сега е добра практика, за да не правите грешка в бъдеще.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongoengine +django как да преброим броя на елементите с едно и също съдържание

  2. Spring Boot Mongodb търсене по ID връща нула

  3. Колекция от броя на MongoDB Node.js

  4. db.stats() блокиращо повикване ли е за MongoDB?

  5. nodejs приложение - mongodb връзката е неуспешна с грешка ECONNREFUSED