始终按特定字段的小写值查询

时间:2014-09-23 09:05:02

标签: python mongodb pymongo mongoengine

我的课程如下:

class TranslationDictionary(Document):
    src_text = StringField(required=True)
    dst_text = StringField(required=True)
    src_lang = StringField(required=True)
    dst_lang = StringField(required=True)

在这个类中,我有几个查询方法,其中一些是通过src_text过滤的,例如:

@classmethod
    def translation_exists(cls, src_lang, src_text):
        return bool(cls.objects(src_lang=src_lang, src_text=src_text).first())

我想解决的问题是我总是希望通过src_text小写值进行搜索。当然,我可以更新所有方法并将条件更改为src_text=src_text.lower(),但这对我来说不是一个非常好的解决方案。我读到了mongoengine custom query sets,这将是一些解决方案,但它需要(至少我没有找到更清晰的方法)来覆盖__call__方法:

class TranslationDictionaryQuerySet(QuerySet):

    def __call__(self, q_obj=None, class_check=True, slave_okay=False,
                 read_preference=None, **query):
        # Make sure we always query for the lowercase src_text value
        if 'src_text' in query:
            query['src_text'] = query['src_text'].lower()
        return super(TranslationDictionaryQuery, self).__call__(
            q_obj=None, class_check=True, slave_okay=False,
            read_preference=None, **query)

所以问题是 - 在使用src_text时,有没有人知道更好/更清晰的解决方案会将TranslationDictionary.objects值转换为小写?

0 个答案:

没有答案