mongoengine

http://docs.mongoengine.org/guide/querying.html#advanced-queries

安装

pipenv install mongoengine

连接数据库
  • connect("数据库名")
    mongodb 没有配置用户权限,用的默认设置。
  • connect("数据库名", host="主机名",port=端口号,username=,password=)
    要验证的方式
定义 表
  • 定义 类,继承自Document
    类名,就是mongodb的集合名


增删改查(CURD)

实例化对象,添加属性,并调用 .save() 保存

查询条件可以写在objects()里,也可以写在filter()里

  • Student.objects.first()
    返回第一个文档,是一个Student object对象
    通过 "." 操作符拿到相应属性。
  • Student.objects.all()
    返回所有文档, 是列表,由Student object对象组成。
  • Student.objects.filter()
    查询条件,用关键字参数传进去。
    返回Student object对象组成的 列表
    若不存在,返回 空列表。
  • Student.objects.filter().first()
    查询满足条件的第一条数据。
字符串查询

表名.objects(字段__操作符=查询条件).order_by()...
注意:字段后是2个下划线

  • exact 完全匹配
  • iexact 完全匹配(忽略大小写)
  • contains 包含该值
  • icontains 包含该值(忽略大小写)
  • startswith 以该字符串开始
  • istartswith 以该字符串开始(忽略大小写)
  • endswith 以该字符串结束
  • iendswith 以该字符串结束(忽略大小写)
  • ne 不等于
  • gt(e) 大于(等于)
  • lt(e) 小于(等于)
  • not 对操作符取反,比如 age__not__gt=18
  • in 后面是一个列表,比如 name__in=["林冲","令狐冲"],找出这两个人的数据,满足一条也可以,若都不存在,返回空列表。
  • nin in的取反
  • mod 取模,比如 age__mod=(2,0) 表示查询出age除以2,余数是0的数据。

多条件查询,使用Q,结合 "&" "|" 实现,
一个 Q 类,代表一个查询条件。
from mongoengine.queryset.visitor import Q
.objects(Q() & Q())

  • 使用PyMongo语句查询, raw前后都是双下划线。
    表名.objects( __ raw __={} )
排序
  • 声明 表 的时候,定义排序。


    *
  • 查询的时候,排序。
    .order_by("+/-字段名")
    正负号,代表升降序。
抽出指定 字段

调用 .only() 方法,括号内传入指定 字段。
可以链式调用,比如: 表名.objects.only().only()
后一个 only() 是添加字段

.exclude()方法,与 .only()相反。
通过 .reload("字段名") 可以重载该字段。

改 删
  • update()
  • update_one()
  • delete()

写法:update(操作符__字段=设置的值)
可以使用如下的操作符:

  • set 设置指定的值
  • unset 删除指定的值
  • inc 自增一个指定的值
  • dec 自减一个指定的值
  • push 在 list 中, 添加一个值
  • push_all 在 list 中, 添加多个值,多个值写成列表的形式。
  • pull 与push相反。
  • pull_all 与push_all相反。
  • add_to_set 当要添加的值存在,则忽略,不存在,则添加。

aggregation methods

  • 表名.objects.count()
    计数。
  • 表名.objects.sum("字段名")
    求和。
  • 表名.objects.average("字段名")
    求平均数。
  • 表名.objects.item_frequencies("字段名")
    返回的是一个字典,key是字段名,value是该字段出现的次数。
    参数 normalize:若为True, value将会是小数,所有字段的value相加为1.
  • 表名.objects.aggregate()
    第一种写法:
    a = { 管道1:{ 表达式1 } }, { 管道2:{ 表达式2 } }
    表名.objects.aggregate(*a)
    注意 多个管道的时候, a前面要加个星号
    第二张写法:
    表名.objects.aggregate({},{},{}...)
    直接用花括号的形式写,中间用逗号分隔。
  • 表名.objects.distinct("字段名")
    返回一个列表,该字段名的值(不重复的)组成的一个列表。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,527评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,314评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,535评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,006评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,961评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,220评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,664评论 3 392
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,351评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,481评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,397评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,443评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,123评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,713评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,801评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,010评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,494评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,075评论 2 341

推荐阅读更多精彩内容