http://docs.mongoengine.org/guide/querying.html#advanced-queries
安裝
pipenv install mongoengine
連接數(shù)據(jù)庫
- connect("數(shù)據(jù)庫名")
mongodb 沒有配置用戶權(quán)限,用的默認(rèn)設(shè)置茁计。- connect("數(shù)據(jù)庫名", host="主機(jī)名",port=端口號贡茅,username=,password=)
要驗(yàn)證的方式
定義 表
定義 類,繼承自Document
類名缤灵,就是mongodb的集合名
增刪改查(CURD)
增
實(shí)例化對象膊升,添加屬性悼做,并調(diào)用 .save() 保存
查
查詢條件可以寫在objects()里,也可以寫在filter()里
- Student.objects.first()
返回第一個(gè)文檔皆串,是一個(gè)Student object對象
通過 "." 操作符拿到相應(yīng)屬性殷费。 - Student.objects.all()
返回所有文檔嘹屯, 是列表攻询,由Student object對象組成。 - Student.objects.filter()
查詢條件州弟,用關(guān)鍵字參數(shù)傳進(jìn)去钧栖。
返回Student object對象組成的 列表
若不存在,返回 空列表婆翔。 - Student.objects.filter().first()
查詢滿足條件的第一條數(shù)據(jù)拯杠。
字符串查詢
表名.objects(字段__操作符=查詢條件).order_by()...
注意:字段后是2個(gè)下劃線
- exact 完全匹配
- iexact 完全匹配(忽略大小寫)
- contains 包含該值
- icontains 包含該值(忽略大小寫)
- startswith 以該字符串開始
- istartswith 以該字符串開始(忽略大小寫)
- endswith 以該字符串結(jié)束
- iendswith 以該字符串結(jié)束(忽略大小寫)
- ne 不等于
- gt(e) 大于(等于)
- lt(e) 小于(等于)
- not 對操作符取反,比如 age__not__gt=18
- in 后面是一個(gè)列表啃奴,比如 name__in=["林沖"潭陪,"令狐沖"],找出這兩個(gè)人的數(shù)據(jù),滿足一條也可以,若都不存在依溯,返回空列表老厌。
- nin in的取反
- mod 取模,比如 age__mod=(2,0) 表示查詢出age除以2黎炉,余數(shù)是0的數(shù)據(jù)枝秤。
多條件查詢,使用Q,結(jié)合 "&" "|" 實(shí)現(xiàn)拜隧,
一個(gè) Q 類宿百,代表一個(gè)查詢條件。
from mongoengine.queryset.visitor import Q
.objects(Q() & Q())
- 使用PyMongo語句查詢, raw前后都是雙下劃線洪添。
表名.objects( __ raw __={} )
排序
聲明 表 的時(shí)候垦页,定義排序。
- 查詢的時(shí)候干奢,排序痊焊。
.order_by("+/-字段名")
正負(fù)號,代表升降序忿峻。
抽出指定 字段
調(diào)用 .only() 方法薄啥,括號內(nèi)傳入指定 字段。
可以鏈?zhǔn)秸{(diào)用,比如: 表名.objects.only().only()
后一個(gè) only() 是添加字段
.exclude()方法逛尚,與 .only()相反垄惧。
通過 .reload("字段名") 可以重載該字段。
改 刪
- update()
- update_one()
- delete()
寫法:update(操作符__字段=設(shè)置的值)
可以使用如下的操作符:
- set 設(shè)置指定的值
- unset 刪除指定的值
- inc 自增一個(gè)指定的值
- dec 自減一個(gè)指定的值
- push 在 list 中绰寞, 添加一個(gè)值
- push_all 在 list 中到逊, 添加多個(gè)值,多個(gè)值寫成列表的形式。
- pull 與push相反滤钱。
- pull_all 與push_all相反觉壶。
- add_to_set 當(dāng)要添加的值存在,則忽略件缸,不存在铜靶,則添加。
aggregation methods
- 表名.objects.count()
計(jì)數(shù)他炊。 - 表名.objects.sum("字段名")
求和争剿。 - 表名.objects.average("字段名")
求平均數(shù)。 - 表名.objects.item_frequencies("字段名")
返回的是一個(gè)字典佑稠,key是字段名秒梅,value是該字段出現(xiàn)的次數(shù)。
參數(shù) normalize:若為True, value將會(huì)是小數(shù)舌胶,所有字段的value相加為1. - 表名.objects.aggregate()
第一種寫法:
a = { 管道1:{ 表達(dá)式1 } }, { 管道2:{ 表達(dá)式2 } }
表名.objects.aggregate(*a)
注意 多個(gè)管道的時(shí)候捆蜀, a前面要加個(gè)星號。
第二張寫法:
表名.objects.aggregate({},{},{}...)
直接用花括號的形式寫,中間用逗號分隔辆它。 - 表名.objects.distinct("字段名")
返回一個(gè)列表誊薄,該字段名的值(不重復(fù)的)組成的一個(gè)列表。