Я предлагаю вам использовать $regex
с учетом регистра без учета регистра. Это не соответствует «ниже», но я подозреваю, что это то, что вы ищете. Также я реорганизовал ваш код для использования $nin
, что немного лучше.
from pymongo import MongoClient
import json
import re
db = MongoClient()['mydatabase']
filters = {'website': 'Google|FaceBook|Twitter'}
db.col.insert_one({'website': 'GOOGLE', 'val': 1})
db.col.insert_one({'website': 'Google', 'val': 2})
db.col.insert_one({'website': 'google', 'val': 3})
db.col.insert_one({'website': 'GoOgLe', 'val': 4})
db.col.insert_one({'website': 'FaceBook', 'val': 5})
db.col.insert_one({'website': 'FaceBook', 'val': None})
db.col.insert_one({'website': 'Twitter', 'val': 6})
db.col.insert_one({'website': 'TWITTER', 'val': 7})
db.col.insert_one({'website': 'TWITTER', 'val': 'none'})
db.col.insert_one({'website': 'Instagram', 'val': 8})
results = list(
db.col.aggregate([
{
'$match': {'website': re.compile(filters['website'], re.IGNORECASE), 'val': {'$nin': [ None, 'none' ] }}
}, {
'$group': {
'_id': {
'val': '$val'
}
}
}, {
'$project': {
'_id': 0,
'val': '$_id.val'
}
}, {
'$sort': {
'val': 1
}
}
])
)
print (json.dumps(results, indent=4))