我们都知道在mongoDB数据库中的查询语句如下:db.collection.find(query, projection)
。但是这在利用django开发过程中并不适用,因为我们需要在model
和view
层进行一些数据查询,这时这些语句在这里以及不适用了,这里可以参考monoengine官方网站里的查询方法,提取如下:
- 直接查询
user = Users.objects()
,这样查询出来的结果是可以直接使用的,username = user.name
- 过滤查询
users = Users.objects(sexy='男')
,这样是查询到所有性别为男的用户。articles = Article.objects(author__sexy='男')
,这样以关键字开头+双下划线+属性
是查询作者是男性的文章。 - 运算符查询
young_users = Users.objects(age__lte=18)
,查询所有年龄小于18岁的用户(注意是双下划线)
ne – 不等于
lt – 小于
lte – 小于或等于
gt – 大于
gte – 大于或等于
not – 不等于
in – 值存在于列表(应提供值列表)
nin – 值不存在列表(应提供值列表)
mod – 其中和是两个提供的值value % x == y x y
all – 提供的值列表中的每个项目都在数组中
size – 数据的大小
exists – 字段存在
- 字符串查询
查询方式和上面一样关键字开头+双下划线+属性
exact - 字符串字段与值完全匹配
iexact - 字符串字段与值完全匹配(不区分大小写)
contains - 字符串字段包含值
icontains - 字符串字段包含值(不区分大小写)
startswith - 字符串字段以值开头
istartswith - 字符串字段以值开头(不区分大小写)
endswith - 字符串字段以值结尾
iendswith - 字符串字段以值结尾(不区分大小写)
match - 执行$ elemMatch,以便您可以匹配数组中的整个文档
- 切片查询
Users.objects(age__lte=18)[:10]
查询年龄小于18的前十位用户 - 高级查询
from mongoengine.queryset.visitor import Q
Users.objects(Q(age__lte=18)&Q(hometown='shanghai')|Q(hometown='beijing'))
查询家乡是上海或北京并且年龄小于18岁的用户