基本所有的查询语句方法,都可以在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
网友评论