MongoEngine不为人知的方法
之前发了个博客写的是MongoEngine的入门文档,在清楚了建表的字段类型,学会如何查询之后,我们来聊聊MongoEngine不常用但很有用的其他方法。
文章目录
1.get查询容错
# 查询某个用户时,get方法有则返回queryset,无则报错User.DoesNotExist
user = User.objects.get(name="xx")
# 为防止报错, 有则返回queryset,无则返回None
user = User.objects.filter(name="xx")
if user:
user = user[0]
# 或者
user = User.objects.filter(name="xx").first()
# 进一步优化
user = User.objects(name="xx").first()
2.with_id使用
# mongo默认id类型为ObjectId,所以使用id查询时,需将str转换为ObjectId
from bson import ObjectId
user = User.objects.get(id=ObjectId(user_id))
# 优化
user = User.objects.with_id(user_id)
3.filter中字符查询-contains使用
# contains包含,icontains包含(忽略大小写)
# 模糊检索时对象属性包含所查询字符,如name为abc,输入ab
user = User.objects.filter(name__contains=search_str)
4.不包含查询
这个功能让我找了好久…知道怎么写的时候眼泪掉下来
# 包含contains 不包含not__contains
# 姓名不包含aa的人
user = User.objects.filter(name__not__contains="aa")
5.list转querySet
# 多对多查询时,查询到某对象关联的列表集,进一步使用filter时报错非querySet
set_role = Role.objects.filter(pk__in=[i.pk for i in role_list if i])
6.querySet转dict
user = User.objects.get(name