美文网首页
MongoEngine 复杂查询

MongoEngine 复杂查询

作者: 霡霂976447044 | 来源:发表于2020-04-26 13:56 被阅读0次

基本所有的查询语句方法,都可以在Google和官方文档搜索的到。

1 动态查询某一个字段的字典的某一个字段的值 是否包含某一个关键字

devices = cls.objects(**{f'user_scope__{uid}__device_nick_name__contains': device_nick_name})

2 或查询和与查询一起使用

from mongoengine.queryset.visitor import Q
devices = cls.objects((Q(owner=uid) | Q(share_user__in=[uid])) & Q(
                    **{f'user_scope__{uid}__device_nick_name__contains': device_nick_name}))
# print(devices._query)  >>>  {'$and': [{'$or': [{'owner': 4}, {'share_user': {'$in': [4]}}]}, {'user_scope.4.device_nick_name': re.compile('ssss')}]}

3 查询的列表和Flask jsontify()使用

目前只发现有这种方式。有更好地对查询字段进行处理的方式请告知。


def objs2dict(obj, *, append=None, delete_id=True, callback=None) -> dict:
    model_dict = obj.to_mongo().to_dict()
    if "entry_date" in model_dict.keys():
        model_dict["entry_date"] = model_dict["entry_date"].strftime('%Y-%m-%d %H:%M:%S')
    if "create_time" in model_dict.keys():
        model_dict["create_time"] = model_dict["create_time"].strftime('%Y-%m-%d %H:%M:%S')
    if "register_date" in model_dict.keys():
        if type(model_dict["register_date"]) is datetime:
            model_dict["register_date"] = model_dict["register_date"].strftime('%Y-%m-%d %H:%M:%S')
        else:
            model_dict["register_date"] = ''
    append = append or []
    for i in append:
        if i not in model_dict.keys():
            model_dict[i] = ''
    if delete_id:
        model_dict.pop('_id')
    if callback and callable(callback):
        callback(model_dict)
    return model_dict

相关文章

网友评论

      本文标题:MongoEngine 复杂查询

      本文链接:https://www.haomeiwen.com/subject/gwddwhtx.html