一、基本概述

目前电脑上已经下载了MongoDB数据库、navicat for mongodb作为mongoDB的可视化工具,形如navicat for mysql作为mysql的可视化工具。
使用Pycharm编写python代码连接mongodb,创建数据库,创建集合(集合是指形如mysql中的sql数据表)等操作。
使用pymongo进行数据库连接,因此需要在pycharm中下载。

二、创建数据库

创建数据库需要使用 MongoClient 对象,并且指定连接的 URL 地址和要创建的数据库名。

import pymongomyclient = pymongo.MongoClient("mongodb://localhost:27017/")#新建数据库
mydb = myclient["runoobdbs"]

注意:

此时navicat还无法看见新建的数据库,这是因为在 MongoDB 中,数据库只有在内容插入后才会创建!
就是说,数据库创建后要创建集合(数据表)并插入一个文档(记录),数据库才会真正创建。

三、判断数据库是否存在

代码如下:

#判断数据库是否存在
dblist = myclient.list_database_names()     #list_database_names()获取数据库名
# dblist = myclient.database_names()
if "runoobdbs" in dblist:print("数据库已存在!")

四、创建集合

代码如下:

#创建集合
mycol = mydb["sites"]

五、判断集合是否存在

代码如下:

#判断集合是否存在
collist = mydb. list_collection_names()    #获取集合名
# collist = mydb.collection_names()
if "sites" in collist:   # 判断 sites 集合是否存在print("集合已存在!")

此时仍旧无法显示数据库和集合名。

六、插入文档

1.插入单个文档
文档就是指的里面的数据。

#插入文档
mydict = {"name": "RUNOOB", "alexa": "10000", "url": "https://www.runoob.com"}x = mycol.insert_one(mydict)
print(x)

若是没有数据库、集合在,此代码上面要有创建数据库、创建集合的代码。
代码运行前MongoDB显示数据库名称:

代码运行后MongoDB显示数据库名称:

运行后navicat fo rmongodb显示如下:

Pycharm运行第一次结果:

第二次运行结果:

此时全部代码有:

import pymongomyclient = pymongo.MongoClient("mongodb://localhost:27017/")#新建数据库
mydb = myclient["runoobdbs"]#判断数据库是否存在
dblist = myclient.list_database_names()     #list_database_names()获取数据库名
# dblist = myclient.database_names()
if "runoobdbs" in dblist:print("数据库已存在!")#创建集合
mycol = mydb["sites"]#判断集合是否存在
collist = mydb. list_collection_names()    #获取集合名
# collist = mydb.collection_names()
if "sites" in collist:   # 判断 sites 集合是否存在print("集合已存在!")#插入文档
mydict = {"name": "RUNOOB", "alexa": "10000", "url": "https://www.runoob.com"}x = mycol.insert_one(mydict)
print(x)

2.返回 _id 字段
insert_one() 方法返回 InsertOneResult 对象,该对象包含 inserted_id 属性,它是插入文档的 id 值。
返回 _id 字段只需要在以上代码最后下再加一句print(x.inserted_id)即可。
结果是:

而此时由于运行了三次,出现了三行内容一样,id不一样的文档。

3.插入多个文档
集合中插入多个文档使用 insert_many() 方法,该方法的第一参数是字典列表。
代码如下:

#插入多个文档
mylist = [{"name": "Taobao", "alexa": "100", "url": "https://www.taobao.com"},{"name": "QQ", "alexa": "101", "url": "https://www.qq.com"},{"name": "Facebook", "alexa": "10", "url": "https://www.facebook.com"},{"name": "知乎", "alexa": "103", "url": "https://www.zhihu.com"},{"name": "Github", "alexa": "109", "url": "https://www.github.com"}
]
x = mycol.insert_many(mylist)
# 输出插入的所有文档对应的 _id 值
print(x.inserted_ids)

Pycharm运行结果:

navicat显示如下:

也可以使用MongoDB查看。

补充:
use+空格+数据库,作用是数据库不在时新建,在时切换到此数据库下。
db.creatCollection('集合名'),创建集合。
db.集合名.find()方法显示此集合下所有数据。

4.插入指定 _id 的多个文档
我们也可以自己指定 id,插入,以下实例我们在 site2 集合中插入数据,_id 为我们指定的:

mycol2 = mydb["site2"]
mylist2 = [{"_id": 1, "name": "RUNOOB", "cn_name": "菜鸟教程"},{"_id": 2, "name": "Google", "address": "Google 搜索"},{"_id": 3, "name": "Facebook", "address": "脸书"},{"_id": 4, "name": "Taobao", "address": "淘宝"},{"_id": 5, "name": "Zhihu", "address": "知乎"}
]
x = mycol2.insert_many(mylist2)
# 输出插入的所有文档对应的 _id 值
print(x.inserted_ids)

Pycharm运行结果:

navicat显示如下:

此时全部代码如下:

import pymongomyclient = pymongo.MongoClient("mongodb://localhost:27017/")#新建数据库
mydb = myclient["runoobdbs"]
#创建集合
mycol = mydb["sites"]
'''
#判断数据库是否存在
dblist = myclient.list_database_names()     #list_database_names()获取数据库名
# dblist = myclient.database_names()
if "runoobdbs" in dblist:print("数据库已存在!")#判断集合是否存在
collist = mydb. list_collection_names()    #获取集合名
# collist = mydb.collection_names()
if "sites" in collist:   # 判断 sites 集合是否存在print("集合已存在!")
'''
#插入文档
#mydict = {"name": "RUNOOB", "alexa": "10000", "url": "https://www.runoob.com"}#x = mycol.insert_one(mydict)
#print(x)
#print(x.inserted_id)#插入多个文档
#mylist = [
#  {"name": "Taobao", "alexa": "100", "url": "https://www.taobao.com"},
#  {"name": "QQ", "alexa": "101", "url": "https://www.qq.com"},
#  {"name": "Facebook", "alexa": "10", "url": "https://www.facebook.com"},
#  {"name": "知乎", "alexa": "103", "url": "https://www.zhihu.com"},
#  {"name": "Github", "alexa": "109", "url": "https://www.github.com"}
#]
#x = mycol.insert_many(mylist)
# 输出插入的所有文档对应的 _id 值
#print(x.inserted_ids)#插入多条不同id的文档
mycol2 = mydb["site2"]
mylist2 = [{"_id": 1, "name": "RUNOOB", "cn_name": "菜鸟教程"},{"_id": 2, "name": "Google", "address": "Google 搜索"},{"_id": 3, "name": "Facebook", "address": "脸书"},{"_id": 4, "name": "Taobao", "address": "淘宝"},{"_id": 5, "name": "Zhihu", "address": "知乎"}
]
x = mycol2.insert_many(mylist2)
# 输出插入的所有文档对应的 _id 值
print(x.inserted_ids)

七、查询文档

本节上个内容有显示MongoDB查询文档的操作,在Pycharm里如何实现查询呢?
1.查询一条数据

#查询一条数据
x = mycol.find_one()
print(x)

Pycharm运行结果:

2.查询集合中所有数据
find() 方法可以查询集合中的所有数据,类似 SQL 中的 SELECT * 操作。

#查询所有数据
for x in mycol.find():print(x)

Pycharm运行结果:

3.查询指定字段的数据
我们可以使用 find() 方法来查询指定字段的数据,将要返回的字段对应值设置为 1。
除了 _id,你不能在一个对象中同时指定 0 和 1,如果你设置了一个字段为 0,则其他都为 1,反之亦然。
不能出现类似这样的代码for x in mycol.find({},{ "name": 1, "alexa": 0 }):

#返回指定字段
for x in mycol.find({},{ "_id": 0, "name": 1, "alexa": 1 }):      #意思是只返回name和alexa,不要idprint(x)for x in mycol.find({},{ "alexa": 0 }):      #除了alexa字段,其他都返回print(x)

运行结果是:


4.根据指定条件查询
我们可以在 find() 中设置参数来过滤数据。

#根据指定条件查询
myquery = {"name": "RUNOOB"}
mydoc = mycol.find(myquery)
for x in mydoc:print(x)

运行结果:

5.高级查询
查询的条件语句中,我们还可以使用修饰符。
以下实例用于读取 name 字段中第一个字母 ASCII 值大于 “H” 的数据,大于的修饰符条件为 {“$gt”: “H”} :

#高级查询
myquery = { "name": { "$gt": "H" }}
mydoc = mycol.find(myquery)
for x in mydoc:print(x)

运行结果:

MongoDB中条件操作符有:
(>) 大于 - $gt
(<) 小于 - $lt
(>=) 大于等于 - $gte
(<= ) 小于等于 - $lte

6.使用正则表达式查询
我们还可以使用正则表达式作为修饰符。
正则表达式修饰符只用于搜索字符串的字段。
以下实例用于读取 name 字段中第一个字母为 “R” 的数据,正则表达式修饰符条件为 {“$regex”: “^R”} :
$regex为模糊查询的字符串提供正则表达式功能。

#使用正则表达式查询
myquery = {"name": {"$regex": "^R"}}    #查询name中以R开头的数据
mydoc = mycol.find(myquery)
for x in mydoc:print(x)

运行结果:

7.返回指定条数记录
如果我们要对查询结果设置指定条数的记录可以使用 limit() 方法,该方法只接受一个数字参数。
以下实例返回 3 条文档记录:

#返回指定条数
myresult = mycol.find().limit(3)     #查询前三条数据
# 输出结果
for x in myresult:print(x)

八、修改文档

在 MongoDB 中使用 update_one() 方法修改文档中的记录。该方法第一个参数为查询的条件,第二个参数为要修改的字段。
如果查找到的匹配数据多于一条,则只会修改第一条。
更新前的数据如下:

代码如下:

#修改一条数据
myquery = {"alexa": "10000"}    #将alexa的10000的数据值改为12345
newvalues = {"$set": {"alexa": "12345"}}
mycol.update_one(myquery, newvalues)
# 输出修改后的  "sites"  集合
for x in mycol.find():print(x)

更新后:

update_one() 方法只能修匹配到的第一条记录,如果要修改所有匹配到的记录,可以使用 update_many()。
以下实例将查找所有以 F 开头的 name 字段,并将匹配到所有记录的 alexa 字段修改为 123:

#修改多条数据
myquery = {"name": {"$regex": "^F"}}        #寻找以F开头的name,将其alexa值改为123
newvalues = {"$set": {"alexa": "123"}}
x = mycol.update_many(myquery, newvalues)
print(x.modified_count, "文档已修改")

更新后:

九、排序

sort() 方法可以指定升序或降序排序。
sort() 方法第一个参数为要排序的字段,第二个字段指定排序规则,1 为升序,-1 为降序,默认为升序。

#排序            将alexa以升序排序
mydoc = mycol.find().sort("alexa")
for x in mydoc:print(x)

结果如下:

降序排序:

#alexa降序
mydoc = mycol.find().sort("alexa", -1)
for x in mydoc:print(x)

结果如下:

十、删除文档

1.删除一个文档
使用 delete_one() 方法来删除一个文档,该方法第一个参数为查询对象,指定要删除哪些数据。
删除前的数据库如图:

#删除一条数据
myquery = { "name": "Taobao" }
mycol.delete_one(myquery)
# 删除后输出
for x in mycol.find():print(x)

删除后:

2.删除多个文档
我们可以使用 delete_many() 方法来删除多个文档,该方法第一个参数为查询对象,指定要删除哪些数据。
删除所有 name 字段中以 F 开头的文档:

#删除多条数据
myquery = {"name": {"$regex": "^F"}}
x = mycol.delete_many(myquery)
print(x.deleted_count, "个文档已删除")

删除后:

3.删除集合中的所有文档
delete_many() 方法如果传入的是一个空的查询对象,则会删除集合中的所有文档:

#删除集合中所有文档
x = mycol.delete_many({})       #mycol = mydb["sites"]连的是sites,所以会删除sites里的所有文档
print(x.deleted_count, "个文档已删除")

删除后:

4.删除集合
我们可以使用 drop() 方法来删除一个集合。

#删除集合
mycol.drop()


总代码有:

import pymongomyclient = pymongo.MongoClient("mongodb://localhost:27017/")#新建数据库
mydb = myclient["runoobdbs"]
#创建集合
mycol = mydb["sites"]
'''
#判断数据库是否存在
dblist = myclient.list_database_names()     #list_database_names()获取数据库名
# dblist = myclient.database_names()
if "runoobdbs" in dblist:print("数据库已存在!")#判断集合是否存在
collist = mydb. list_collection_names()    #获取集合名
# collist = mydb.collection_names()
if "sites" in collist:   # 判断 sites 集合是否存在print("集合已存在!")
'''
#插入文档
#mydict = {"name": "RUNOOB", "alexa": "10000", "url": "https://www.runoob.com"}#x = mycol.insert_one(mydict)
#print(x)
#print(x.inserted_id)#插入多个文档
#mylist = [
#  {"name": "Taobao", "alexa": "100", "url": "https://www.taobao.com"},
#  {"name": "QQ", "alexa": "101", "url": "https://www.qq.com"},
#  {"name": "Facebook", "alexa": "10", "url": "https://www.facebook.com"},
#  {"name": "知乎", "alexa": "103", "url": "https://www.zhihu.com"},
#  {"name": "Github", "alexa": "109", "url": "https://www.github.com"}
#]
#x = mycol.insert_many(mylist)
# 输出插入的所有文档对应的 _id 值
#print(x.inserted_ids)#插入多条不同id的文档
#mycol2 = mydb["site2"]
#mylist2 = [
#  {"_id": 1, "name": "RUNOOB", "cn_name": "菜鸟教程"},
#  {"_id": 2, "name": "Google", "address": "Google 搜索"},
#  {"_id": 3, "name": "Facebook", "address": "脸书"},
#  {"_id": 4, "name": "Taobao", "address": "淘宝"},
#  {"_id": 5, "name": "Zhihu", "address": "知乎"}
#]
#x = mycol2.insert_many(mylist2)
# 输出插入的所有文档对应的 _id 值
#print(x.inserted_ids)#查询一条数据
#x = mycol.find_one()
#print(x)#查询所有数据
#for x in mycol.find():
#  print(x)#返回指定字段
#for x in mycol.find({},{ "_id": 0, "name": 1, "alexa": 1 }):      #意思是只返回name和alexa,不要id
#  print(x)#for x in mycol.find({},{ "alexa": 0 }):      #除了alexa字段,其他都返回
#  print(x)#根据指定条件查询
#myquery = {"name": "RUNOOB"}
#mydoc = mycol.find(myquery)
#for x in mydoc:
#  print(x)#高级查询
#myquery = { "name": { "$gt": "H" }}
#mydoc = mycol.find(myquery)
#for x in mydoc:
#  print(x)#使用正则表达式查询
#myquery = {"name": {"$regex": "^R"}}
#mydoc = mycol.find(myquery)
#for x in mydoc:
#  print(x)#返回指定条数
#myresult = mycol.find().limit(3)
# 输出结果
#for x in myresult:
#  print(x)#修改一条数据
#myquery = {"alexa": "10000"}     #将alexa的10000的数据值改为12345
#newvalues = {"$set": {"alexa": "12345"}}
#mycol.update_one(myquery, newvalues)
# 输出修改后的  "sites"  集合
#for x in mycol.find():
#  print(x)#修改多条数据
#myquery = {"name": {"$regex": "^F"}}   #寻找以F开头的name,将其alexa值改为123
#newvalues = {"$set": {"alexa": "123"}}
#x = mycol.update_many(myquery, newvalues)
#print(x.modified_count, "文档已修改")#排序            将alexa以升序排序
#mydoc = mycol.find().sort("alexa")
#for x in mydoc:
#  print(x)#alexa降序
#mydoc = mycol.find().sort("alexa", -1)
#for x in mydoc:
#  print(x)#删除一条数据
#myquery = {"name": "Taobao"}
#mycol.delete_one(myquery)
# 删除后输出
#for x in mycol.find():
#  print(x)#删除多条数据
#myquery = {"name": {"$regex": "^F"}}
#x = mycol.delete_many(myquery)
#print(x.deleted_count, "个文档已删除")#删除集合中所有文档
#x = mycol.delete_many({})
#print(x.deleted_count, "个文档已删除")#删除集合
mycol.drop()

Python使用pymongo连接MongoDB数据库并进行操作相关推荐

  1. python连接mongodb数据库密码_windows下mongodb设置用户名密码用python连接

    环境: 主机:WIN10 python版本:3.5 mongodb版本:3.4.2 开发环境:pyCharm mongodb设置用户名密码: 编写mongodb配置文件mongodb.conf dbp ...

  2. mongo go 查询指定字段_使用PyMongo查询MongoDB数据库!

    总览 我们将讨论如何使用PyMongo库查询MongoDB数据库. 我们将介绍MongoDB中的基本聚合操作. 介绍 随着互联网的全球普及,我们现在正在以前所未有的速度生成数据.因为执行任何类型的分析 ...

  3. pymongo查询列表元素_使用PyMongo查询MongoDB数据库!

    作者|LAKSHAY ARORA 编译|Flin 来源|analyticsvidhya 介绍 随着互联网的普及,我们现在正以前所未有的速度生成数据.因为执行任何类型的分析都需要我们从数据库中收集/查询 ...

  4. python使用pymongo读写mongodb

    转载请注明出处:python使用pymongo读写mongodb 准备工作 在开始之前,请确保已经安装好了MongoDB并启动了其服务,并且安装好了Python的PyMongo库. PyMongo介绍 ...

  5. pydev集成mysql_【Python】Windows平台下Python、Pydev连接Mysql数据库

    Mysql数据库是跨平台的,不是说Python一定就要连接Mongodb. Python连接Mysql数据库是非常easy的. 首先,你要配置好Python的开发环境,详见<[Python]Wi ...

  6. Scala连接mongodb数据库

    mongodb是一种面向文档的数据库,Scala是一种函数式编程语言,由于项目的关系,需要使用Scala连接mongodb数据库.下面介绍具体的方法. 就像Java连接MySQL数据库需要JDBC一样 ...

  7. powerbuilder(pb)连接mongodb数据库:使用ODBC连接

    1.点击此处下载mongodb的odbc驱动 注意:这里的odbc驱动是要收费的,所以下载体验版试试 2.下载后,一路next即可,不需要勾选配置数据源 3.配置ODBC数据源,因为pb使用的多数是3 ...

  8. 记录python使用pymysql连接mysql数据库,使用impyla、ibis-framework[impala]连接hive\impala(kerberos)数据库(备以后查阅)

    记录python使用pymysql连接mysql数据库,使用impyla.ibis-framework[impala]连接hive\impala(kerberos)数据库(备以后查阅) 连接mysql ...

  9. golang中连接mongo数据库并进行操作

    golang中连接mongo数据库并进行操作 golang中连接mongo数据库并进行操作 首先,我们需要下载mongo模块 执行 go get github.com/mongodb/mongo-go ...

最新文章

  1. python三十一:random模块
  2. 计网 - 传输层协议 TCP:TCP 为什么握手是 3 次、挥手是 4 次?
  3. Altium designer中高亮元器件或网络时对比度调节
  4. 最长公共子序列(JAVA实现)
  5. 学习笔记之ByteBuffer使用和实现以及文件内存映射
  6. linux网路编程之TCP状态转换及端口复用
  7. 1073 多选题常见计分法 (20 分)
  8. 人生一知己,足以慰风尘吗?
  9. 计算机网络中使用的双绞线通常是16芯的,自考计算机应用基础判断题试题答案...
  10. minst 手写数字识别实战
  11. 智鼎逻辑推理题及答案_2019最新玛氏笔试真题节选(含答案及解析)
  12. bzoj1698 / P1606 [USACO07FEB]白银莲花池Lilypad Pond
  13. [Python]基于pygame的像素转化器
  14. android 按钮带图标 阴影_Android Material Design系列之FloatingActionButton和Snackbar
  15. SpringData Manytomany 中间表添加额外字段
  16. 产学交流 | 重庆科技学院数理学院一行到访芝诺数据
  17. 【全网最暴力解决方案】使用gdb调试时遭遇“Missing separate debuginfos, use: debuginfo-install glibc....”报错信息
  18. 能把计算机c盘我的文档,电脑c盘哪些文件可以删除,手把手教你c盘里哪些文件可以删除...
  19. 服装ERP应用(20) ERP在分销型服装企业的物流管理
  20. Weblogic入门

热门文章

  1. 深入浅出内存管理-- 伙伴系统(buddy system)
  2. 服务器先raid还是先系统好,新的服务器是先装系统还是在做raid0
  3. 海康终端服务器5012a,TS-5012-F终端服务器-HikvisionUSA解析.pdf
  4. weblogic服务器设置编码
  5. 【金融证券】证券基础之股债基
  6. 设备巡检管理系统的作用
  7. 玩魂斗罗怎么能少了Arduino游戏手柄!
  8. 三大措施助力连接提速 网易云信打造智慧IM云架构
  9. D. Death by Thousand Cuts(立体几何)
  10. 工业智能网关BL110应用之六: 支持PLC,Modbus,BACnet,电表等协议列表