模型示例:
class Address(EmbeddedDocument):
country = StringField(require=True)
class User(Document):
email = StringField(required=True)
first_name = StringField(max_length=50)
last_name = StringField(max_length=50)
address = ListField(EmbeddedDocumentField(Address))
class Post(Document):
title = StringField(max_length=120, required=True)
author = ReferenceField(User)
tags = ListField(StringField(max_length=30))
- 简单查询
Post.objects(title='python') 查看title等于python的post
Post.objects(title__icontains='python') 忽略大小写,title中包含python的post
Post.objects(title__contains='python') 不忽略大小写
字符串类型匹配:
- exact – 精确匹配
- iexact – 精确匹配,但是忽略大小写
- contains – 包含
- icontains – 包含,忽略大小写
- startswith – 匹配开头
- istartswith – 匹配开头,忽略大小写
- endswith – 匹配结尾
- iendswith – 匹配结尾,忽略大小写
- match – performs an $elemMatch so you can match an entire document within an array
数值型匹配:
- ne – 不等于
- lt – 小于
- lte – 小于等于
- gt – 大于
- gte – 大于等于
- not – negate a standard check, may be used before other operators (e.g.Q(age__not__mod=(5, 0)))
- in – 属于
- nin – 不属于
- mod – value % x == y, where x and y are two provided values
- all – every item in list of values provided is in array
- size – 计算arry的大小
- exists – 字段的值是否存在
2.关联查询
- Fields on embedded documents
User.objects(address__country='USA') # 查询地址中的国家名字等于USA的用户
User.objects(address__country__icontains='USA') # 查询地址中的国家名字包含USA的用户
3.list字段查询
Post.objects(tags='python') # 查询tags中包含python的post
Post.objects(tags__0='python') # 匹配tags中第一个值为python的post
4.原始查询语句
Post.objects(__raw__={"tags": 'python'})