sql >> Databáze >  >> NoSQL >> MongoDB

PyMongo- výběr dílčích dokumentů z kolekce podle regulárního výrazu

Potřebujete agregační kanál, který odpovídá každému vnořenému dokumentu samostatně, a poté znovu spojí odpovídající vnořené dokumenty do polí:

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

Předpokládám, že „col“ je proměnná ukazující na váš objekt kolekce PyMongo. Tento výstup:

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

Předpona "r" k řetězci z něj dělá "raw" řetězec Pythonu, aby se předešlo problémům s regex kódem. V tomto případě je regulární výraz pouze „ab“, takže předpona „r“ není nutná, ale je to nyní dobrý postup, abyste v budoucnu neudělali chybu.




  1. Jak spojit a seřadit několik sbírek v jednom potrubí v Mongo

  2. Nelze se připojit k chybě ověření MongoLab

  3. Jak definovat delimeter pro import mongodb

  4. Jedna publikace skrývá vnořená pole z jiné publikace