我们都知道在mongoDB数据库中的查询语句如下:db.collection.find(query, projection)。但是这在利用django开发过程中并不适用,因为我们需要在modelview层进行一些数据查询,这时这些语句在这里以及不适用了,这里可以参考monoengine官方网站里的查询方法,提取如下:

  1. 直接查询
    user = Users.objects(),这样查询出来的结果是可以直接使用的,username = user.name
  2. 过滤查询
    users = Users.objects(sexy='男'),这样是查询到所有性别为男的用户。
    articles = Article.objects(author__sexy='男'),这样以关键字开头+双下划线+属性是查询作者是男性的文章。
  3. 运算符查询
    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 – 字段存在

  1. 字符串查询
    查询方式和上面一样关键字开头+双下划线+属性

exact - 字符串字段与值完全匹配
iexact - 字符串字段与值完全匹配(不区分大小写)
contains - 字符串字段包含值
icontains - 字符串字段包含值(不区分大小写)
startswith - 字符串字段以值开头
istartswith - 字符串字段以值开头(不区分大小写)
endswith - 字符串字段以值结尾
iendswith - 字符串字段以值结尾(不区分大小写)
match - 执行$ elemMatch,以便您可以匹配数组中的整个文档

  1. 切片查询
    Users.objects(age__lte=18)[:10]查询年龄小于18的前十位用户
  2. 高级查询
from mongoengine.queryset.visitor import Q
Users.objects(Q(age__lte=18)&Q(hometown='shanghai')|Q(hometown='beijing'))

查询家乡是上海或北京并且年龄小于18岁的用户