目录
- 前言
- import
- 连接到数据库
- 创建数据库/集合
- 插入数据
- 查询数据
- 单条查询
- 多条查询
- 只查某些字段
- 复杂(复合)对象查询
- 更新数据
- 删除数据
前言
上一篇:MongoDB初次体验 下载安装与配置
mongodb是好用的非关系型数据库,可以以json对象的形式存储数据,这在web应用中有非常好的特性,且拥有良好的可拓展性。所以今天来总结一下如何用python的pymongo模块驱动mongodb,实现常见的增删查改操作。
pymongo所有操作都是同步的,等待结果时程序会阻塞。值得一提的是,mongodb速度要比mysql快很多。。。
import
通过
import pymongo
引入驱动模块。如果未安装,那么需要用pip进行安装,下面给出使用pip安装到对应的python版本
python -m pip install pymongo
如果是linux,那么别忘了加上sudo
,全局安装
sudo python -m pip install pymongo
连接到数据库
使用pymongo.MongoClient
连接到数据库,并且获取数据库对象,其中参数是mongodb的地址
mongoclient = pymongo.MongoClient('mongodb://localhost:27017/')
值得注意的是,整个mongoclient
就是一个巨大的map(或者说dict ?),可以通过索引来找到不同的数据库与集合。下面给出mongoclient
及其数据库与集合的架构
#mermaid-svg-oF7To3EPS8xF92DO .label {font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family);fill: #333;color: #333; }#mermaid-svg-oF7To3EPS8xF92DO .label text {fill: #333; }#mermaid-svg-oF7To3EPS8xF92DO .node rect, #mermaid-svg-oF7To3EPS8xF92DO .node circle, #mermaid-svg-oF7To3EPS8xF92DO .node ellipse, #mermaid-svg-oF7To3EPS8xF92DO .node polygon, #mermaid-svg-oF7To3EPS8xF92DO .node path {fill: #ECECFF;stroke: #9370DB;stroke-width: 1px; }#mermaid-svg-oF7To3EPS8xF92DO .node .label {text-align: center;fill: #333; }#mermaid-svg-oF7To3EPS8xF92DO .node.clickable {cursor: pointer; }#mermaid-svg-oF7To3EPS8xF92DO .arrowheadPath {fill: #333333; }#mermaid-svg-oF7To3EPS8xF92DO .edgePath .path {stroke: #333333;stroke-width: 1.5px; }#mermaid-svg-oF7To3EPS8xF92DO .flowchart-link {stroke: #333333;fill: none; }#mermaid-svg-oF7To3EPS8xF92DO .edgeLabel {background-color: #e8e8e8;text-align: center; } #mermaid-svg-oF7To3EPS8xF92DO .edgeLabel rect {opacity: 0.9; } #mermaid-svg-oF7To3EPS8xF92DO .edgeLabel span {color: #333; }#mermaid-svg-oF7To3EPS8xF92DO .cluster rect {fill: #ffffde;stroke: #aaaa33;stroke-width: 1px; }#mermaid-svg-oF7To3EPS8xF92DO .cluster text {fill: #333; }#mermaid-svg-oF7To3EPS8xF92DO div.mermaidTooltip {position: absolute;text-align: center;max-width: 200px;padding: 2px;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family);font-size: 12px;background: #ffffde;border: 1px solid #aaaa33;border-radius: 2px;pointer-events: none;z-index: 100; }#mermaid-svg-oF7To3EPS8xF92DO .actor {stroke: #CCCCFF;fill: #ECECFF; }#mermaid-svg-oF7To3EPS8xF92DO text.actor > tspan {fill: black;stroke: none; }#mermaid-svg-oF7To3EPS8xF92DO .actor-line {stroke: grey; }#mermaid-svg-oF7To3EPS8xF92DO .messageLine0 {stroke-width: 1.5;stroke-dasharray: none;stroke: #333; }#mermaid-svg-oF7To3EPS8xF92DO .messageLine1 {stroke-width: 1.5;stroke-dasharray: 2, 2;stroke: #333; }#mermaid-svg-oF7To3EPS8xF92DO #arrowhead path {fill: #333;stroke: #333; }#mermaid-svg-oF7To3EPS8xF92DO .sequenceNumber {fill: white; }#mermaid-svg-oF7To3EPS8xF92DO #sequencenumber {fill: #333; }#mermaid-svg-oF7To3EPS8xF92DO #crosshead path {fill: #333;stroke: #333; }#mermaid-svg-oF7To3EPS8xF92DO .messageText {fill: #333;stroke: #333; }#mermaid-svg-oF7To3EPS8xF92DO .labelBox {stroke: #CCCCFF;fill: #ECECFF; }#mermaid-svg-oF7To3EPS8xF92DO .labelText,#mermaid-svg-oF7To3EPS8xF92DO .labelText > tspan {fill: black;stroke: none; }#mermaid-svg-oF7To3EPS8xF92DO .loopText,#mermaid-svg-oF7To3EPS8xF92DO .loopText > tspan {fill: black;stroke: none; }#mermaid-svg-oF7To3EPS8xF92DO .loopLine {stroke-width: 2px;stroke-dasharray: 2, 2;stroke: #CCCCFF;fill: #CCCCFF; }#mermaid-svg-oF7To3EPS8xF92DO .note {stroke: #aaaa33;fill: #fff5ad; }#mermaid-svg-oF7To3EPS8xF92DO .noteText,#mermaid-svg-oF7To3EPS8xF92DO .noteText > tspan {fill: black;stroke: none; }#mermaid-svg-oF7To3EPS8xF92DO .activation0 {fill: #f4f4f4;stroke: #666; }#mermaid-svg-oF7To3EPS8xF92DO .activation1 {fill: #f4f4f4;stroke: #666; }#mermaid-svg-oF7To3EPS8xF92DO .activation2 {fill: #f4f4f4;stroke: #666; }#mermaid-svg-oF7To3EPS8xF92DO .mermaid-main-font {font-family: "trebuchet ms", verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-oF7To3EPS8xF92DO .section {stroke: none;opacity: 0.2; }#mermaid-svg-oF7To3EPS8xF92DO .section0 {fill: rgba(102, 102, 255, 0.49); }#mermaid-svg-oF7To3EPS8xF92DO .section2 {fill: #fff400; }#mermaid-svg-oF7To3EPS8xF92DO .section1, #mermaid-svg-oF7To3EPS8xF92DO .section3 {fill: white;opacity: 0.2; }#mermaid-svg-oF7To3EPS8xF92DO .sectionTitle0 {fill: #333; }#mermaid-svg-oF7To3EPS8xF92DO .sectionTitle1 {fill: #333; }#mermaid-svg-oF7To3EPS8xF92DO .sectionTitle2 {fill: #333; }#mermaid-svg-oF7To3EPS8xF92DO .sectionTitle3 {fill: #333; }#mermaid-svg-oF7To3EPS8xF92DO .sectionTitle {text-anchor: start;font-size: 11px;text-height: 14px;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-oF7To3EPS8xF92DO .grid .tick {stroke: lightgrey;opacity: 0.8;shape-rendering: crispEdges; } #mermaid-svg-oF7To3EPS8xF92DO .grid .tick text {font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-oF7To3EPS8xF92DO .grid path {stroke-width: 0; }#mermaid-svg-oF7To3EPS8xF92DO .today {fill: none;stroke: red;stroke-width: 2px; }#mermaid-svg-oF7To3EPS8xF92DO .task {stroke-width: 2; }#mermaid-svg-oF7To3EPS8xF92DO .taskText {text-anchor: middle;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-oF7To3EPS8xF92DO .taskText:not([font-size]) {font-size: 11px; }#mermaid-svg-oF7To3EPS8xF92DO .taskTextOutsideRight {fill: black;text-anchor: start;font-size: 11px;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-oF7To3EPS8xF92DO .taskTextOutsideLeft {fill: black;text-anchor: end;font-size: 11px; }#mermaid-svg-oF7To3EPS8xF92DO .task.clickable {cursor: pointer; }#mermaid-svg-oF7To3EPS8xF92DO .taskText.clickable {cursor: pointer;fill: #003163 !important;font-weight: bold; }#mermaid-svg-oF7To3EPS8xF92DO .taskTextOutsideLeft.clickable {cursor: pointer;fill: #003163 !important;font-weight: bold; }#mermaid-svg-oF7To3EPS8xF92DO .taskTextOutsideRight.clickable {cursor: pointer;fill: #003163 !important;font-weight: bold; }#mermaid-svg-oF7To3EPS8xF92DO .taskText0, #mermaid-svg-oF7To3EPS8xF92DO .taskText1, #mermaid-svg-oF7To3EPS8xF92DO .taskText2, #mermaid-svg-oF7To3EPS8xF92DO .taskText3 {fill: white; }#mermaid-svg-oF7To3EPS8xF92DO .task0, #mermaid-svg-oF7To3EPS8xF92DO .task1, #mermaid-svg-oF7To3EPS8xF92DO .task2, #mermaid-svg-oF7To3EPS8xF92DO .task3 {fill: #8a90dd;stroke: #534fbc; }#mermaid-svg-oF7To3EPS8xF92DO .taskTextOutside0, #mermaid-svg-oF7To3EPS8xF92DO .taskTextOutside2 {fill: black; }#mermaid-svg-oF7To3EPS8xF92DO .taskTextOutside1, #mermaid-svg-oF7To3EPS8xF92DO .taskTextOutside3 {fill: black; }#mermaid-svg-oF7To3EPS8xF92DO .active0, #mermaid-svg-oF7To3EPS8xF92DO .active1, #mermaid-svg-oF7To3EPS8xF92DO .active2, #mermaid-svg-oF7To3EPS8xF92DO .active3 {fill: #bfc7ff;stroke: #534fbc; }#mermaid-svg-oF7To3EPS8xF92DO .activeText0, #mermaid-svg-oF7To3EPS8xF92DO .activeText1, #mermaid-svg-oF7To3EPS8xF92DO .activeText2, #mermaid-svg-oF7To3EPS8xF92DO .activeText3 {fill: black !important; }#mermaid-svg-oF7To3EPS8xF92DO .done0, #mermaid-svg-oF7To3EPS8xF92DO .done1, #mermaid-svg-oF7To3EPS8xF92DO .done2, #mermaid-svg-oF7To3EPS8xF92DO .done3 {stroke: grey;fill: lightgrey;stroke-width: 2; }#mermaid-svg-oF7To3EPS8xF92DO .doneText0, #mermaid-svg-oF7To3EPS8xF92DO .doneText1, #mermaid-svg-oF7To3EPS8xF92DO .doneText2, #mermaid-svg-oF7To3EPS8xF92DO .doneText3 {fill: black !important; }#mermaid-svg-oF7To3EPS8xF92DO .crit0, #mermaid-svg-oF7To3EPS8xF92DO .crit1, #mermaid-svg-oF7To3EPS8xF92DO .crit2, #mermaid-svg-oF7To3EPS8xF92DO .crit3 {stroke: #ff8888;fill: red;stroke-width: 2; }#mermaid-svg-oF7To3EPS8xF92DO .activeCrit0, #mermaid-svg-oF7To3EPS8xF92DO .activeCrit1, #mermaid-svg-oF7To3EPS8xF92DO .activeCrit2, #mermaid-svg-oF7To3EPS8xF92DO .activeCrit3 {stroke: #ff8888;fill: #bfc7ff;stroke-width: 2; }#mermaid-svg-oF7To3EPS8xF92DO .doneCrit0, #mermaid-svg-oF7To3EPS8xF92DO .doneCrit1, #mermaid-svg-oF7To3EPS8xF92DO .doneCrit2, #mermaid-svg-oF7To3EPS8xF92DO .doneCrit3 {stroke: #ff8888;fill: lightgrey;stroke-width: 2;cursor: pointer;shape-rendering: crispEdges; }#mermaid-svg-oF7To3EPS8xF92DO .milestone {transform: rotate(45deg) scale(0.8, 0.8); }#mermaid-svg-oF7To3EPS8xF92DO .milestoneText {font-style: italic; }#mermaid-svg-oF7To3EPS8xF92DO .doneCritText0, #mermaid-svg-oF7To3EPS8xF92DO .doneCritText1, #mermaid-svg-oF7To3EPS8xF92DO .doneCritText2, #mermaid-svg-oF7To3EPS8xF92DO .doneCritText3 {fill: black !important; }#mermaid-svg-oF7To3EPS8xF92DO .activeCritText0, #mermaid-svg-oF7To3EPS8xF92DO .activeCritText1, #mermaid-svg-oF7To3EPS8xF92DO .activeCritText2, #mermaid-svg-oF7To3EPS8xF92DO .activeCritText3 {fill: black !important; }#mermaid-svg-oF7To3EPS8xF92DO .titleText {text-anchor: middle;font-size: 18px;fill: black;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-oF7To3EPS8xF92DO g.classGroup text {fill: #9370DB;stroke: none;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family);font-size: 10px; } #mermaid-svg-oF7To3EPS8xF92DO g.classGroup text .title {font-weight: bolder; }#mermaid-svg-oF7To3EPS8xF92DO g.clickable {cursor: pointer; }#mermaid-svg-oF7To3EPS8xF92DO g.classGroup rect {fill: #ECECFF;stroke: #9370DB; }#mermaid-svg-oF7To3EPS8xF92DO g.classGroup line {stroke: #9370DB;stroke-width: 1; }#mermaid-svg-oF7To3EPS8xF92DO .classLabel .box {stroke: none;stroke-width: 0;fill: #ECECFF;opacity: 0.5; }#mermaid-svg-oF7To3EPS8xF92DO .classLabel .label {fill: #9370DB;font-size: 10px; }#mermaid-svg-oF7To3EPS8xF92DO .relation {stroke: #9370DB;stroke-width: 1;fill: none; }#mermaid-svg-oF7To3EPS8xF92DO .dashed-line {stroke-dasharray: 3; }#mermaid-svg-oF7To3EPS8xF92DO #compositionStart {fill: #9370DB;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-oF7To3EPS8xF92DO #compositionEnd {fill: #9370DB;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-oF7To3EPS8xF92DO #aggregationStart {fill: #ECECFF;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-oF7To3EPS8xF92DO #aggregationEnd {fill: #ECECFF;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-oF7To3EPS8xF92DO #dependencyStart {fill: #9370DB;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-oF7To3EPS8xF92DO #dependencyEnd {fill: #9370DB;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-oF7To3EPS8xF92DO #extensionStart {fill: #9370DB;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-oF7To3EPS8xF92DO #extensionEnd {fill: #9370DB;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-oF7To3EPS8xF92DO .commit-id, #mermaid-svg-oF7To3EPS8xF92DO .commit-msg, #mermaid-svg-oF7To3EPS8xF92DO .branch-label {fill: lightgrey;color: lightgrey;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-oF7To3EPS8xF92DO .pieTitleText {text-anchor: middle;font-size: 25px;fill: black;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-oF7To3EPS8xF92DO .slice {font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-oF7To3EPS8xF92DO g.stateGroup text {fill: #9370DB;stroke: none;font-size: 10px;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-oF7To3EPS8xF92DO g.stateGroup text {fill: #9370DB;fill: #333;stroke: none;font-size: 10px; }#mermaid-svg-oF7To3EPS8xF92DO g.statediagram-cluster .cluster-label text {fill: #333; }#mermaid-svg-oF7To3EPS8xF92DO g.stateGroup .state-title {font-weight: bolder;fill: black; }#mermaid-svg-oF7To3EPS8xF92DO g.stateGroup rect {fill: #ECECFF;stroke: #9370DB; }#mermaid-svg-oF7To3EPS8xF92DO g.stateGroup line {stroke: #9370DB;stroke-width: 1; }#mermaid-svg-oF7To3EPS8xF92DO .transition {stroke: #9370DB;stroke-width: 1;fill: none; }#mermaid-svg-oF7To3EPS8xF92DO .stateGroup .composit {fill: white;border-bottom: 1px; }#mermaid-svg-oF7To3EPS8xF92DO .stateGroup .alt-composit {fill: #e0e0e0;border-bottom: 1px; }#mermaid-svg-oF7To3EPS8xF92DO .state-note {stroke: #aaaa33;fill: #fff5ad; } #mermaid-svg-oF7To3EPS8xF92DO .state-note text {fill: black;stroke: none;font-size: 10px; }#mermaid-svg-oF7To3EPS8xF92DO .stateLabel .box {stroke: none;stroke-width: 0;fill: #ECECFF;opacity: 0.7; }#mermaid-svg-oF7To3EPS8xF92DO .edgeLabel text {fill: #333; }#mermaid-svg-oF7To3EPS8xF92DO .stateLabel text {fill: black;font-size: 10px;font-weight: bold;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-oF7To3EPS8xF92DO .node circle.state-start {fill: black;stroke: black; }#mermaid-svg-oF7To3EPS8xF92DO .node circle.state-end {fill: black;stroke: white;stroke-width: 1.5; }#mermaid-svg-oF7To3EPS8xF92DO #statediagram-barbEnd {fill: #9370DB; }#mermaid-svg-oF7To3EPS8xF92DO .statediagram-cluster rect {fill: #ECECFF;stroke: #9370DB;stroke-width: 1px; }#mermaid-svg-oF7To3EPS8xF92DO .statediagram-cluster rect.outer {rx: 5px;ry: 5px; }#mermaid-svg-oF7To3EPS8xF92DO .statediagram-state .divider {stroke: #9370DB; }#mermaid-svg-oF7To3EPS8xF92DO .statediagram-state .title-state {rx: 5px;ry: 5px; }#mermaid-svg-oF7To3EPS8xF92DO .statediagram-cluster.statediagram-cluster .inner {fill: white; }#mermaid-svg-oF7To3EPS8xF92DO .statediagram-cluster.statediagram-cluster-alt .inner {fill: #e0e0e0; }#mermaid-svg-oF7To3EPS8xF92DO .statediagram-cluster .inner {rx: 0;ry: 0; }#mermaid-svg-oF7To3EPS8xF92DO .statediagram-state rect.basic {rx: 5px;ry: 5px; }#mermaid-svg-oF7To3EPS8xF92DO .statediagram-state rect.divider {stroke-dasharray: 10,10;fill: #efefef; }#mermaid-svg-oF7To3EPS8xF92DO .note-edge {stroke-dasharray: 5; }#mermaid-svg-oF7To3EPS8xF92DO .statediagram-note rect {fill: #fff5ad;stroke: #aaaa33;stroke-width: 1px;rx: 0;ry: 0; }:root {--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive; }#mermaid-svg-oF7To3EPS8xF92DO .error-icon {fill: #552222; }#mermaid-svg-oF7To3EPS8xF92DO .error-text {fill: #552222;stroke: #552222; }#mermaid-svg-oF7To3EPS8xF92DO .edge-thickness-normal {stroke-width: 2px; }#mermaid-svg-oF7To3EPS8xF92DO .edge-thickness-thick {stroke-width: 3.5px; }#mermaid-svg-oF7To3EPS8xF92DO .edge-pattern-solid {stroke-dasharray: 0; }#mermaid-svg-oF7To3EPS8xF92DO .edge-pattern-dashed {stroke-dasharray: 3; }#mermaid-svg-oF7To3EPS8xF92DO .edge-pattern-dotted {stroke-dasharray: 2; }#mermaid-svg-oF7To3EPS8xF92DO .marker {fill: #333333; }#mermaid-svg-oF7To3EPS8xF92DO .marker.cross {stroke: #333333; }:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-oF7To3EPS8xF92DO {color: rgba(0, 0, 0, 0.75);font: ;}
mongocilent
数据库1
数据库2
集合1
集合2
我们可以通过
mongoclient = pymongo.MongoClient('mongodb://localhost:27017/')
db = mongoclient["test"] # 连接到数据库
col = db["testCollection"] # 获取集合
来连接到test
数据库的testCollection
集合,并且获取集合对象col
创建数据库/集合
在mongodb中,无需特定的语句创建数据库。往指定的数据库与集合里面插入数据,如果数据库或集合不存在,那么将会被自动创建,这是好的。这意味着我们可以省略一些判断。
值得注意的是,必须插入至少一条语句,数据库与集合的创建才能生效。
运行如下代码在test数据库中新建testCollection的集合,并且插入一条数据
mongoclient = pymongo.MongoClient('mongodb://localhost:27017/')
db = mongoclient["test"]
col = db["testCollection"]col.insert_one({"name": "TensorLee", "number": 114514})
起 效 了 在mongodb的控制台可以查看代码执行的结果
插入数据
在集合中插入数据,我们先要获取集合对象。这里我们沿用上文的,获取test
数据库的testCollection
集合
mongoclient = pymongo.MongoClient('mongodb://localhost:27017/')
db = mongoclient["test"]
col = db["testCollection"]
因为python中也有dict数据类型,类似json对象的表示方法,我们可以通过insert_one
方法,直接插入一个dict对象来表示插入的记录。
col.insert_one({"name": "student0", "number": 4396})
我们也可以通过insert_many
方法来插入许多对象,其中参数是一个list,里面每个元素是要插入的对象(dict)
col.insert_many(list)
下面的代码演示了两种插入方法:
mongoclient = pymongo.MongoClient('mongodb://localhost:27017/')
db = mongoclient["test"]
col = db["testCollection"]col.insert_one({"name": "student0", "number": 4396})list = [{"name": "student1","number": 10001},{"name": "student2","number": 10002},{"name": "student3","number": 10003}
]col.insert_many(list)
值得注意的是,这两个函数是有返回值的。返回插入文档的_id
字段(即mongodb的自带主键)
insert_one
函数的返回值是一个对象,其 inserted_id
属性是插入文档的_id
insert_many
函数的返回值是一个对象,其 inserted_ids
(比上面多个s) 属性是插入文档的_id
的数组(list)
除此之外,返回的对象可以通过强制类型转换,转换为字符串。即id_str = str(id)
。下面的代码演示了如何获取返回值并且把它变成字符串(字符串数组)
mongoclient = pymongo.MongoClient('mongodb://localhost:27017/')
db = mongoclient["test"]
col = db["testCollection"]ret = col.insert_one({"name": "student0", "number": 4396})
print('insert_one函数返回: ', str(ret.inserted_id))list = [{"name": "student1","number": 10001},{"name": "student2","number": 10002},{"name": "student3","number": 10003}
]ret = col.insert_many(list)
retlist = []
for id in ret.inserted_ids:retlist.append(str(id))
print('insert_many函数返回: ', retlist)
输出
mongodb查询代码执行结果
查询数据
我们知道在mongodb的console中,通过find函数传入条件对象
的方式,可以指定查找的条件,比如
在pymongo中,也是同样,传入条件对象(dict)
即可快速查询。这里使用find_one
来返回单个查询结果
单条查询
mongoclient = pymongo.MongoClient('mongodb://localhost:27017/')
db = mongoclient["test"]
col = db["testCollection"]found = col.find_one({"number": 10001})
notfound = col.find_one({"number": 114514})print(found)
print(notfound)
值得注意的是,如果存在,那么返回该对象(在python中表示为dict),如果不存在,返回None。结果如下:
多条查询
如果使用find
而不是find_one
,那么会返回全部符合的记录
mongoclient = pymongo.MongoClient('mongodb://localhost:27017/')
db = mongoclient["test"]
col = db["testCollection"]ret = col.find()
for i in ret:print(i)
只查某些字段
有时候我们没有必要获取整个记录的对象,而只用获取对象的某一属性,如果查询的是整个对象,那么浪费带宽。
find函数的第二个参数是字段条件筛选对象
,可以指定返回那些字段。比如我们只要number字段。
mongoclient = pymongo.MongoClient('mongodb://localhost:27017/')
db = mongoclient["test"]
col = db["testCollection"]where = {"name": "student0"
}need = {"_id": 0,"number": 1
}ret = col.find_one(where, need)
print(ret)
值得注意的是,除了 _id
属性,其他属性,只要未出现在need中,默认不选择。上述代码给出示例:除了number,其他都不要
当然也可以反选,即"number": 0
,那么未出现的属性,就默认选了。以下代码给出示例:除了name,其他都要
mongoclient = pymongo.MongoClient('mongodb://localhost:27017/')
db = mongoclient["test"]
col = db["testCollection"]where = {"name": "student0"
}
value = {"name": 0,
}
ret = col.find_one(where, value)
print(ret)
复杂(复合)对象查询
在实际生产中,往往会存储复杂对象,比如对象的属性是另一个对象
obj = {"name": "TensorLee","bodyState": {"bloodType": "AB","shape": {"height": "123cm","weight": "456kg"}}
}
这时候我们可以在条件指定中,通过 父对象.子对象
的方式来定位到要查找的字段。
比如我们要查找上述对象的 bodyState属性中的shape属性的height属性,我们就传bodyState.shape.height
即可
mongoclient = pymongo.MongoClient('mongodb://localhost:27017/')
db = mongoclient["test"]
col = db["testCollection"]where = {"bodyState.shape.height": "123cm"
}ret = col.find_one(where)print(ret)
更新数据
和查询数据类似,我们指定where对象,即那些记录要被更新,然后指定value对象,即更新那些字段。值得注意的是,value对象的指定,和我们使用mongodb的JavaScript运行时控制台一样,需要指定$set 或 $inc
等指令
以下的代码将name
为student0
的第一条记录的number
字段改为7777
mongoclient = pymongo.MongoClient('mongodb://localhost:27017/')
db = mongoclient["test"]
col = db["testCollection"]where = {"name": "student0"
}
value = {"$set": {"number": 7777}
}
col.update_one(where, value)
检查运行结果
指定 $inc
指令可以让数据字段自增(或者自减),以下的value对象指定了number字段增加10
value = {"$inc": {"number": 10}
}
检查代码运行结果
如果使用 update 那么将更新所有匹配的记录,而不是只更新第一条记录。
删除数据
使用delete_one 或者 delete_many
函数,用法和find函数类似,同样指定where对象即可。delete_many
会删除所有符合的记录。
使用如下代码删除所有number大于10000的记录
mongoclient = pymongo.MongoClient('mongodb://localhost:27017/')
db = mongoclient["test"]
col = db["testCollection"]where = {"number": {"$gt": 10000}
}
col.delete_many(where)
检查删除结果
python mongodb驱动 pymongo模块常见用法总结相关推荐
- python configparse_python中ConfigParse模块的用法
ConfigParser 是Python自带的模块, 用来读写配置文件, 用法及其简单. 配置文件的格式是: [...]包含的叫section section 下有option=value这样的键值 ...
- Python中else关键字的常见用法
Python中的else常见用法有三:选择结构.循环结构和异常处理结构. (1)选择结构 这应该是最常见的用法,与关键字if和elif组合来使用,用来说明条件不符合时应执行的代码块. (2)循环结构 ...
- python代码使用dns进行调试_dnspython模块常见用法
dnspython是一个处理DNS的Python工具模块,支持查询.DNS动态更新.操作ZONE配置文件等功能.由于网上文档较少且不详细,官方文档还不完善,这个模块使用起来比较困难,所以我决定把我自己 ...
- python request-Python之request模块-基础用法
Request模块 1.查看pip已装包(模块)的安装信息(模块的路径.版本.模块说明) 语法:pip show 模块名 例子:pip show requests 2.发送请求 当然还有其他的请求方式 ...
- python中的timeit模块的用法
timeit模块 timeit模块可以用来测试一小段Python代码的执行速度. class timeit.Timer(stmt='pass', setup='pass', timer=<tim ...
- Python高级数组处理模块numpy用法精要
numpy是Python的高级数组处理扩展库,提供了Python中没有的数组对象,支持N维数组运算.处理大型矩阵.成熟的广播函数库.矢量运算.线性代数.傅里叶变换以及随机数生成等功能,可与C++.FO ...
- Python中MySQLdb的各种常见用法
Python代码 # -*- coding: utf-8 -*- #mysqldb import time, MySQLdb #连接 conn=MySQLdb.connect(host="l ...
- Python中lambda表达式的常见用法
非常抱歉,昨天发的代码中有一处小错误,已通过留言的方式进行了纠正,详情请见详解Python列表推导式 lambda表达式常用来声明匿名函数,即没有函数名字的临时使用的小函数.lambda表达式只可以包 ...
- Python 中的 os 模块常见方法
os.remove()删除文件 os.rename()重命名文件 os.walk()生成目录树下的所有文件名 os.chdir()改变目录 os.path.split()返回(dirname(),ba ...
最新文章
- 赋能RPA时代,微软发布通用文档理解预训练模型LayoutLM
- 深度学习核心技术精讲100篇(五十一)-Spark平台下基于LDA的k-means算法实现
- 致我测试之路的“七年之痒”
- spring循环依赖及解决方式_来探究一下Spring 循环依赖的三种方式
- 深入剖析Redis RDN持久化机制
- win_32如何安装mysql_windows安装MySQL详细图解过程
- MySql中左连接查询突然变得很慢
- huawei交换机普通远程登陆配置
- 物联网行业的现状与思考
- wps word设置多级标题及对应目录
- 美国小学计算机编程课程,美国小学STEM课程案例研究
- office便捷办公05:Mathtype导致office2015复制、粘贴快捷键无法使用问题处理
- 【DirectX11】【学习笔记(4)】顶点索引
- 【openh264】libfreerdp 编解码 CQP VBR
- 游戏原画设计HTML5模板是一款适合网页游戏原画设计作品展示的HTML5网站模板。
- 36 岁捧走图灵碗!80 岁算法大师高德纳要在 105 岁完结《计算机程序设计艺术》...
- SSO单点登录(集成SSO认证服务)
- 东北大学计算机科学与技术研究生,2021年东北大学计算机科学与技术(081200)硕士研究生招生信息_考研招生计划和招生人数 - 学途吧...
- 聚观早报 | 苹果发布新款iPad;罗永浩将开启淘宝直播
- 百度语音api的文字转语音,语音转文字-yellowcong
热门文章
- Intellij IDEA 重新编译
- 在菜单Setting加入子菜单
- 统一身份认证,企业实现统一身份认证有什么好处?
- Rust - 过程宏
- 一起学ORBSLAM2(12)结语
- caffe SSD 代码编译运行流程及问题解决
- C语言报错:error: expected ‘while’ at end of input } ^
- 项目管理中的边边角角 之三
- 雅腾php怎么样_2018年09月26日
- 过年了,程序员同学如何给老板提加薪?