目录
1. 简介
2. pip安装
3. 创建数据库
4. 判断数据库是否存在
5. 创建集合(MongoDB中没有数据表的概念,统称集合)
6. 判断集合是否存在
7. 增、删、改、查的操作
一、添加数据
二、查询数据
三、修改数据
四、删除数据
五、查看表
MongoDB是目前最流行的NoSQL数据库之一,使用的数据类型BSON(类似JSON)。
安装pymongo:
pip install pymongo
# 也可指定安装的版本
pip install pymongo==3.5.1
# 更新pymongo
pip install --upgrade pymongo
创建数据库需要使用MongoClient对象,并且指定连接的URL地址和要创建的数据库名。
如:
import pymongo
myclient=pymongo.MongoClient("mongodb://localhost:27017/")
mydb=myclient["runoobdb"]
# 注:MongoDB中,数据库只有在内容插入后才会创建,就是说,数据库创建后要创建集合(数据表)
并插入一个文档(记录),数据库才会真正创建。
import pymongo
myclient=pymongo.MongoClient("mongodb://localhost:27017/")
dblist=myclient.list_database_names()
if 'ruboob' in dblist:
print('数据库已存在')
MongoDB中的集合类似SQL中的表,使用数据库对象来创建集合:
import pymongo
myclient=pymongo.MongoClient('mongodb://localhost:27107/')
mydb=myclient['runoob']
mycol=mydb['sites']
# 创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。
import pymongo
myclient=pymongo.MongoClient('mongodb://localhost:27107/')
mydb=myclient['runoobdb']
collist=mydb.list_collection_names()
if 'sites' in collist:
print('集合已存在!')
单条数据插入集合:调用接口insert_one(),参数是字典格式。
import pymongo
myclient=pymongo.MongoClient('mongodb://localhost:27107/')
mydb=myclient['runoobdb']
mycol=mydb['sites']
mydict={'name':'RUNOOB','url':'www.baidu.com'}
x=mycol.insert_one(mydict)
print(x)
# 插入数据后得到返回的InsertOneResult对象,包含inserted_id,它是插入文档的id值。
print(x.inserted_id)
集合中插入多个文档使用insert_many()接口,参数是字典列表。
import pymongo
myclient=pymongo.MongoClient('mongodb://localhost:27107/')
mydb=myclient['runoobdb']
mycol=mydb['sites']
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 的多个文档
import pymongo
myclient=pymongo.MongoClient('mongodb://localhost:27107/')
mydb=myclient['runoobdb']
mycol=mydb['site2']
mylist = [
{ "_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=mycol.insert_many(mylist)
# 输出文档对应的 _id 值
print(x.inserted_ids)
查询一条数据:使用 find_one() 方法来查询集合中的一条数据,如查询sites文档中的第一条数据。
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
x = mycol.find_one()
print(x)
# 输出结果
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'RUNOOB', 'alexa': '10000',
'url': 'https://www.runoob.com'}
查询集合中的所有数据: find() 方法可以查询集合中的所有数据,类似SQL中的 select * 操作。
如:
import pymongo
myclient=pymongo.MongoClient('mongodb://localhost:27107/')
mydb=myclient['runoobdb']
mycol=mydb['sites']
for x in mycol.find():
print(x)
# 输出结果
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'RUNOOB', 'alexa': '10000', 'url': 'https://www.runoob.com'}
{'_id': ObjectId('5b2369cac315325f3698a1cf'), 'name': 'Google', 'alexa': '1', 'url': 'https://www.google.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'alexa': '100', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb7'), 'name': 'QQ', 'alexa': '101', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb8'), 'name': 'Facebook', 'alexa': '10', 'url': 'https://www.facebook.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb9'), 'name': '知乎', 'alexa': '103', 'url': 'https://www.zhihu.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbba'), 'name': 'Github', 'alexa': '109', 'url': 'https://www.github.com'}
查询指定字段的数据:还是采用 find()方法,只不过将要返回的字段设置为1.
如:
import pymongo
myclient=pymongo.MongoClient('mongodb://localhost:27107/')
mydb=myclient['runoobdb']
mycol=mydb['sites']
for x in mycol.find({},{'_id':0,'name':1,'alexa':1})
print(x)
# 输出结果
{'name': 'RUNOOB', 'alexa': '10000'}
{'name': 'Google', 'alexa': '1'}
{'name': 'Taobao', 'alexa': '100'}
{'name': 'QQ', 'alexa': '101'}
{'name': 'Facebook', 'alexa': '10'}
{'name': '知乎', 'alexa': '103'}
{'name': 'Github', 'alexa': '109'}
注意:除了 _id ,怒能在一个对象中同时指定0和1,如果一个字段为0,则其他都为1,反之亦然。
如,除了alexa 字段外,其他都返回:
import pymongo
myclient=pymongo.MongoClient('mongodb://localhost:27107/')
mydb=myclient['runoobdb']
mycol=mydb['sites']
for x in mycol.find({},{'alexa':0})
print(x)
# 输出结果
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'RUNOOB', 'url': 'https://www.runoob.com'}
{'_id': ObjectId('5b2369cac315325f3698a1cf'), 'name': 'Google', 'url': 'https://www.google.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb7'), 'name': 'QQ', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb8'), 'name': 'Facebook', 'url': 'https://www.facebook.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb9'), 'name': '知乎', 'url': 'https://www.zhihu.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbba'), 'name': 'Github', 'url': 'https://www.github.com'}
指定条件查询:在 find()中设置参数来过滤数据。
import pymongo
myclient=pymongo.MongoClient("mongdb://localhost:27107/')
mydb=myclient['runoobdb']
mycol=mydb['sites']
query={"name":"RUNOOB"}
result=mycol.find(query)
for x in resutl:
print(x)
# 输出结果
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'RUNOOB', 'alexa': '10000', 'url': 'https://www.runoob.com'}
返回指定条目数:采用 limit(),如 mycol.find().limit(3)
正则表达式查询:如读取 name字段中,首字母为 R的数据,正则表达式修饰符条件为 {"$regex":"^R"}
query={'name':{'$regex':'^R'}}
result=mycol.find(query)
for x in result:
print(x)
单条数据修改,使用 update_one() 接口,查询到第一个匹配的数据,并修改。如,将alexa字段的值由10000改为12345。
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
myquery = { "alexa": "10000" }
newvalues = { "$set": { "alexa": "12345" } }
mycol.update_one(myquery, newvalues)
# 输出修改后的 "sites" 集合
for x in mycol.find():
print(x)
多条数据修改,使用 update_many(),如查找F开头的name字段,并将查到的alexa字段修改为123:
import pymongo
myclient=pymongo.MongoClient('mongodb:localhost:27107/')
mydb=myclient['runoob']
mycol=mydb['sites']
myquery={'name':{'$regex':'^F'}}
newvalues={'$set':{'alexa':'123'}}
x=mycol.update_many(myquery,newvalues)
print(x.modified_count,'文档已修改')
删除单条数据,查询到第一个匹配的对象,并删除:
import pymongo
myclient=pymongo.MongoClient('mongodb:localhost/')
mydb=myclient['runoobdb']
mycol=mydb['sites']
myquery={'name':'Taobao'}
mycol.delete_one(myquery)
# 删除后输出
for x in mycol.find():
print(x)
删除多个文档,使用delete_many() ,采用正则查询,并删除,如删除name字段中以F开头的文档:
import pymongo
myclient=pymongo.MongoClient('mongodb://localhost:27107/')
mydb=myclient['runoobdb']
mycol=mydb['sites']
myquery={'name':{'$regex':'^F'}}
x=mycol.find_many(mysquery)
print(x.delete_count,'个文档已删除')
删除集合中的所有文档,不需要指定字段,用{}代替即可:
import pymongo
myclient=pymongo.MongoClient('mongodb://localhost:27107/')
mydb=myclient['runoobdb']
mycol=mydb['sites']
mycol.delete_many({})
print(x.deleted_count,'个文档已删除')
删除结合,使用drop()接口即可
import pymongo
myclient=pymongo.MongoClient('mongodb://localhost:27107/')
mydb=myclient['runoobdb']
mycol=mydb['sites']
mycol.drop()
操作方式与mysql类似,
# 切换数据库
use runoobdb;
# 查看所有数据表
show tables;