sql >> Databasteknik >  >> NoSQL >> MongoDB

PyMongo - välj underdokument från insamling av regex

Du behöver en aggregeringspipeline som matchar varje underdokument separat, och sedan åter sammanfogar de matchande underdokumenten till arrayer:

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

Jag antar att "col" är en variabel som pekar på ditt PyMongo Collection-objekt. Detta ger ut:

[{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"-prefixet till strängen gör den till en Python "rå"-sträng för att undvika problem med regex-kod. I det här fallet är regexet bara "ab", så prefixet "r" är inte nödvändigt, men det är bra praxis nu så att du inte gör ett misstag i framtiden.




  1. Mongoose-schema:Validerar unikt fält, skiftlägesokänsligt

  2. Ta bort dokument från en mongodb-samling från node.js

  3. Mongodb startvarningar efter uppdatering

  4. mongodb öppen anslutningsproblem