MongoDB基本概念


连接数据库

#########  方法一  ##########
import pymongo
# MongoClient()返回一个mongodb的连接对象client
client = pymongo.MongoClient(host="localhost",port=27017)#########  方法二  ##########
import pymongo
# MongoClient的第一个参数host还可以直接传MongoDB的连接字符串,以mongodb开头
client = pymongo.MongoClient(host="mongodb://127.0.0.1:27017/")

创建/指定数据库

######  方法一  ######
# 指定test数据库
db = client.test######  方法二  ######
# 指定test数据库(调用client的test属性即可返回test数据库)
db = client["test"]

查看数据库

client.list_database_names()['local', 'test', 'admin', 'medical']

指定/插入集合

######  方法一  ######
# 指定student集合
collection = db.student######  方法二  ######
# 指定student集合
collection = db["student"]

增:插入文档/数据

pymongo 3.x版本中,insert()方法官方已不推荐使用,推荐使用**insert_one()insert_many()**将插入单条和多条记录分开。

  • db.collection.insert_one()
    用于插入单条记录,返回的是InsertOneResult对象
student = {'name': 'Jordan','age': 18,'gender': 'man'
}result = collection.insert_one(student)
# insert_one()返回的是InsertOneResult对象,我们可以调用其inserted_id属性获取_id。
print(result)  # <pymongo.results.InsertOneResult object at 0x10d68b558>
print(result.inserted_id) # 5932ab0f15c2606f0c1cf6c5
  • db.collection.insert_many()
    用于插入多条记录,返回的是InsertManyResult对象

student1 = {'name': 'Jordan','age': 10,'gender': 'man'
}student2 = {'name': 'Mike','age': 11,'gender': 'man'
}result = collection.insert_many([student1, student2])
# insert_many()方法返回的类型是InsertManyResult,调用inserted_ids属性可以获取插入数据的_id列表
print(result)  # <pymongo.results.InsertManyResult object at 0x101dea558>
print(result.inserted_ids) # [ObjectId('5932abf415c2607083d3b2ac'), ObjectId('5932abf415c2607083d3b2ad')]

查 : 查询数据

查找全部数据 find()

collection.find() #<pymongo.cursor.Cursor at 0x7fdc2bf4ac50>  返回一个对象for i in collection.find():print (i)#{'_id': ObjectId('5dc7a74df971b26b5833f454'), 'name': 'Jordan', 'age': 18, 'gender': 'man'}
#{'_id': ObjectId('5dc7a808f971b26b5833f455'), 'name': 'Jordan', 'age': 10, 'gender': 'man'}
#{'_id': ObjectId('5dc7a808f971b26b5833f456'), 'name': 'Mike', 'age': 11, 'gender': 'man'}
results = collection.find({"age":18})
print(results) # <pymongo.cursor.Cursor object at 0x1032d5128>
for result in results:print(result)# <pymongo.cursor.Cursor object at 0x7fdc28a2ac50>
#{'_id': ObjectId('5dc7a74df971b26b5833f454'), 'name': 'Jordan', 'age': 18, 'gender': 'man'}

查询单个数据 find_one()

collection.find_one({'name':'Mike'})# 结果
{'_id': ObjectId('5dc7a808f971b26b5833f456'),'name': 'Mike','age': 11,'gender': 'man'}

查询条件


# age大于10岁的
for i in collection.find({'age':{'$gt':10}}):print (i)
#{'_id': ObjectId('5dc7a74df971b26b5833f454'), 'name': 'Jordan', 'age': 18, 'gender': 'man'}
#{'_id': ObjectId('5dc7a808f971b26b5833f456'), 'name': 'Mike', 'age': 11, 'gender': 'man'}# 注意 $get 上要加引号

多条件查询

多条件查询 $and $or

## and查询
res = collection.find({'age':{'$gt':10}} , {'gender' : 'man'})
for i in res:print (i)#{'_id': ObjectId('5dc7a74df971b26b5833f454'), 'gender': 'man'}#{'_id': ObjectId('5dc7a808f971b26b5833f456'), 'gender': 'man'}## or查询
res = collection.find({'$or':[{'age':{'$gt':10}} , {'gender' : 'man'}]
})
for i in res:print (i)
#{'_id': ObjectId('5dc7a74df971b26b5833f454'), 'name': 'Jordan', 'age': 18, 'gender': 'man'}
#{'_id': ObjectId('5dc7a808f971b26b5833f455'), 'name': 'Jordan', 'age': 10, 'gender': 'man'}
#{'_id': ObjectId('5dc7a808f971b26b5833f456'), 'name': 'Mike', 'age': 11, 'gender': 'man'}

获取文档个数 count()

collection.find().count()3

排序 sort()

排序 sort()
调用sort方法,传入要排序的字段and升降序标志即可

# 默认升序
res = collection.find().sort('age',pymongo.ASCENDING)
for i in res:print (i)
#{'_id': ObjectId('5dc7a808f971b26b5833f455'), 'name': 'Jordan', 'age': 10, 'gender': 'man'}
#{'_id': ObjectId('5dc7a808f971b26b5833f456'), 'name': 'Mike', 'age': 11, 'gender': 'man'}
#{'_id': ObjectId('5dc7a74df971b26b5833f454'), 'name': 'Jordan', 'age': 18, 'gender': 'man'}# 降序
res = collection.find().sort('age',pymongo.DESCENDING)
for i in res:print (i)
#{'_id': ObjectId('5dc7a74df971b26b5833f454'), 'name': 'Jordan', 'age': 18, 'gender': 'man'}
#{'_id': ObjectId('5dc7a808f971b26b5833f456'), 'name': 'Mike', 'age': 11, 'gender': 'man'}
#{'_id': ObjectId('5dc7a808f971b26b5833f455'), 'name': 'Jordan', 'age': 10, 'gender': 'man'}   

skip

跳过查询的记录

# 查询全部
results = collection.find().sort('name', pymongo.ASCENDING)
print ([result['name'] for result in results])
#['Jordan', 'Jordan', 'Mike']# skip(2)
results = collection.find().sort('name', pymongo.ASCENDING).skip(2)
print ([result['name'] for result in results])
['Mike']

**注意:*在数据量非常庞大时(千万、亿级别),最好不要用skip()来查询数据,可能导致内存溢出。可以使用
find({'_id': {'$gt': ObjectId('593278c815c2602678bb2b8d')}})
这样的方法来查询。

limit()

读取指定数量的数据记录

results = collection.find().sort('name', pymongo.ASCENDING).limit(1)
print([result['name'] for result in results])
# ['Jordan']

改 : 更新数据

  • db.collection.update_one()
    修改单条文档,返回结果是UpdateResult类型
result = collection.update_one({"name" : "Mike"} , {"$inc" : {"age" : 5}, "$set": {"gender": "male"}}
)
print(result)   # <pymongo.results.UpdateResult object at 0x10d17b678>print(result.matched_count, result.modified_count)   # 1  1
collection.update_one({'name':'Mike'},{'$set':{'gender':'qqq'}})for i in collection.find():print (i){'_id': ObjectId('5dc7a74df971b26b5833f454'), 'name': 'Jordan', 'age': 18, 'gender': 'man'}
{'_id': ObjectId('5dc7a808f971b26b5833f455'), 'name': 'Jordan', 'age': 10, 'gender': 'man'}
{'_id': ObjectId('5dc7a808f971b26b5833f456'), 'name': 'Mike', 'age': 21, 'gender': 'qqq'}

$inc

  1. 使用$inc操作符将一个字段的值增加或者减少的格式是 :

{ $inc: { <field1>: <amount1>, <field2>: <amount2>, ... } }

  1. $inc操作符接收正的和负的值

​ 如果指定的字段不存在则$inc操作符创建这个字段并且设置这个字段的值为指定的在值 ,存在则不变

$set用于更新

update_one() 方法只能修匹配到的第一条记录,如果要修改所有匹配到的记录,可以使用 update_many()

方法一样

删: 删除数据

删除全部

collection.remove()
# {'ok': 1, 'n': 3}

删除一条

result = collection.delete_one({'name': 'Kevin'})
print(result) # <pymongo.results.DeleteResult object at 0x10e6ba4c8>
print(result.deleted_count)  # 1

删除多条

result = collection.delete_many({'name': 'Kevin'})
print(result) # <pymongo.results.DeleteResult object at 0x55e6be5f1>
print(result.deleted_count)  # 4

删除集合

#!/usr/bin/python3import pymongomyclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]mycol.drop()

pymongo学习笔记相关推荐

  1. 基于pymongo的学生信息考勤管理系统开发学习笔记之mongo篇

    基于pymongo的学生信息考勤管理系统开发学习笔记 前言 Chapter 1. 安装简要 第一节 下载安装mongo 第二节 配置mongo 第三节 安装mongoVue Chapter 2. 数据 ...

  2. Python3 爬虫学习笔记 C11【数据储存系列 — MongoDB】

    Python3 爬虫学习笔记第十一章 -- [数据储存系列 - MongoDB] 文章目录 [11.1]关于 MongoDB [11.2]MongoDB 基本操作语句 [11.3]连接 MongoDB ...

  3. Python爬虫学习笔记 -- 爬取糗事百科

    Python爬虫学习笔记 -- 爬取糗事百科 代码存放地址: https://github.com/xyls2011/python/tree/master/qiushibaike 爬取网址:https ...

  4. HyperLedger Cello学习笔记

    HyperLedger Cello学习笔记 转载请注明出处:HyperLedger Cello学习笔记 概述 Hyperledger Cello是Hyperledger下的一个子项目,其主要功能如下: ...

  5. 唤醒手腕Python全栈工程师学习笔记(网络爬虫篇)

    唤醒手腕Python爬虫学习笔记,喜欢的同学们可以收藏下,谢谢支持. 01.基础语法知识点 字符串的分割 webString = 'www.baidu.com' print(webString.spl ...

  6. 唤醒手腕Python全栈工程师学习笔记(持久存储篇)

    这个篇目是"持久存储篇",讲的就是Python操作数据库,这边介绍3种数据库,分别是MySQL.Redis.Mongodb 1. Python操作MySQL数据库 MySQL属于传 ...

  7. 《Python核心编程(第3版)》学习笔记及书评

    <Python核心编程(第3版)>学习笔记 文章目录 <Python核心编程(第3版)>学习笔记 写在前面 1. 正则表达式 1.1 常用语法 1.2 re模块 2. 网络编程 ...

  8. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  9. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

最新文章

  1. 前端性能优化之gzip
  2. 根据矩阵变化实现基于 HTML5 的 WebGL 3D 自动布局
  3. realloc,malloc,calloc的区别
  4. ajax请求锁屏功能
  5. 我的世界大佬最多的服务器,《我的世界》门槛最高的红石服务器TIS,看看你跟大佬们的差距吧...
  6. 如何从Gitee中拉取项目到HBuilder中?
  7. NYOJ 63 小猴子下落
  8. TAIGA项目管理平台快速安装
  9. win10中配置Java完整教程
  10. Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用 一
  11. Winform开发框架的重要特性总结
  12. linux dstat 多 cpu,dstat 用法总结
  13. android checkboxpreference属性,如何更改android中CheckBoxPreference标题的文本颜色?
  14. 华为双系统手机可以刷成单系统_华为手机双系统,1部手机能当2部用,打开3秒就能切换,真厉害...
  15. 【FLUENT案例】01:T型管混合器中的流动与传热
  16. 安卓原生系统_全球首个原生安卓车载系统实测!操作流畅 可跟手机媲美
  17. Maven之jar包冲突引入非第三方jar
  18. 像素值为什么归一化?归一化作用?
  19. 百度Apollo仿真仿真平台搭建-附1
  20. 一只猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半加一个。到第N天早上想再吃时,见只剩下一个桃子了。

热门文章

  1. 解读指标 Mali-400MP4 GPU 指标
  2. 安防视频监控系统概述
  3. CAN总线与RS485的区别
  4. servlet跳转到jsp指定div
  5. 【Photoshop_CC_2018】msvcr120.dll丢失及应用程序无法正常启动0xc000007b修复dll问题解决
  6. GPS导航电子地图以及标准格式介绍
  7. 大学生选择Oclean欧可林智能电动牙刷的三个理由
  8. Ubuntu配置Rosetta安装教程
  9. [转]安装体验开源车载系统Automotive Grade Linux(AGL)
  10. C/C++ DLL反射式注入内存手动映射