目录

  • 前言
  • 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的自带主键)

  1. insert_one 函数的返回值是一个对象,其 inserted_id 属性是插入文档的_id
  2. 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 等指令

以下的代码将namestudent0的第一条记录的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模块常见用法总结相关推荐

  1. python configparse_python中ConfigParse模块的用法

    ConfigParser 是Python自带的模块, 用来读写配置文件, 用法及其简单. 配置文件的格式是: [...]包含的叫section section 下有option=value这样的键值 ...

  2. Python中else关键字的常见用法

    Python中的else常见用法有三:选择结构.循环结构和异常处理结构. (1)选择结构 这应该是最常见的用法,与关键字if和elif组合来使用,用来说明条件不符合时应执行的代码块. (2)循环结构 ...

  3. python代码使用dns进行调试_dnspython模块常见用法

    dnspython是一个处理DNS的Python工具模块,支持查询.DNS动态更新.操作ZONE配置文件等功能.由于网上文档较少且不详细,官方文档还不完善,这个模块使用起来比较困难,所以我决定把我自己 ...

  4. python request-Python之request模块-基础用法

    Request模块 1.查看pip已装包(模块)的安装信息(模块的路径.版本.模块说明) 语法:pip show 模块名 例子:pip show requests 2.发送请求 当然还有其他的请求方式 ...

  5. python中的timeit模块的用法

    timeit模块 timeit模块可以用来测试一小段Python代码的执行速度. class timeit.Timer(stmt='pass', setup='pass', timer=<tim ...

  6. Python高级数组处理模块numpy用法精要

    numpy是Python的高级数组处理扩展库,提供了Python中没有的数组对象,支持N维数组运算.处理大型矩阵.成熟的广播函数库.矢量运算.线性代数.傅里叶变换以及随机数生成等功能,可与C++.FO ...

  7. Python中MySQLdb的各种常见用法

    Python代码 # -*- coding: utf-8 -*- #mysqldb import time, MySQLdb #连接 conn=MySQLdb.connect(host="l ...

  8. Python中lambda表达式的常见用法

    非常抱歉,昨天发的代码中有一处小错误,已通过留言的方式进行了纠正,详情请见详解Python列表推导式 lambda表达式常用来声明匿名函数,即没有函数名字的临时使用的小函数.lambda表达式只可以包 ...

  9. Python 中的 os 模块常见方法

    os.remove()删除文件 os.rename()重命名文件 os.walk()生成目录树下的所有文件名 os.chdir()改变目录 os.path.split()返回(dirname(),ba ...

最新文章

  1. 赋能RPA时代,微软发布通用文档理解预训练模型LayoutLM
  2. 深度学习核心技术精讲100篇(五十一)-Spark平台下基于LDA的k-means算法实现
  3. 致我测试之路的“七年之痒”
  4. spring循环依赖及解决方式_来探究一下Spring 循环依赖的三种方式
  5. 深入剖析Redis RDN持久化机制
  6. win_32如何安装mysql_windows安装MySQL详细图解过程
  7. MySql中左连接查询突然变得很慢
  8. huawei交换机普通远程登陆配置
  9. 物联网行业的现状与思考
  10. wps word设置多级标题及对应目录
  11. 美国小学计算机编程课程,美国小学STEM课程案例研究
  12. office便捷办公05:Mathtype导致office2015复制、粘贴快捷键无法使用问题处理
  13. 【DirectX11】【学习笔记(4)】顶点索引
  14. 【openh264】libfreerdp 编解码 CQP VBR
  15. 游戏原画设计HTML5模板是一款适合网页游戏原画设计作品展示的HTML5网站模板。
  16. 36 岁捧走图灵碗!80 岁算法大师高德纳要在 105 岁完结《计算机程序设计艺术》...
  17. SSO单点登录(集成SSO认证服务)
  18. 东北大学计算机科学与技术研究生,2021年东北大学计算机科学与技术(081200)硕士研究生招生信息_考研招生计划和招生人数 - 学途吧...
  19. 聚观早报 | 苹果发布新款iPad;罗永浩将开启淘宝直播
  20. 百度语音api的文字转语音,语音转文字-yellowcong

热门文章

  1. Intellij IDEA 重新编译
  2. 在菜单Setting加入子菜单
  3. 统一身份认证,企业实现统一身份认证有什么好处?
  4. Rust - 过程宏
  5. 一起学ORBSLAM2(12)结语
  6. caffe SSD 代码编译运行流程及问题解决
  7. C语言报错:error: expected ‘while’ at end of input } ^
  8. 项目管理中的边边角角 之三
  9. 雅腾php怎么样_2018年09月26日
  10. 过年了,程序员同学如何给老板提加薪?