MongoDB
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
MongoDB 是目前最流行的 NoSQL 数据库之一,使用的数据类型 BSON(类似 JSON)。
安装 MongoDB(以Windows 平台为例)
网址:https://www.mongodb.com/try/download/community
下载这个文件,并按提示安装吧。都是下一步下一步,此处不表述了。
全部完成后,运行MongoDBCompass图形界面管理工具,就能看到它的操作界面,OK!
准备数据
为了说明问题,建立数据库--“通讯录数据库”和集合--“学生名单”,设定age、name、sex等3个字段和输入相关数据,这些一会儿就要用到。
也可以自己先建一个"学生名单.csv"文件,从ADD DATA这个地方导入数据进来。
PyMongo
Python 要连接 MongoDB 需要 MongoDB 驱动,用pip3安装
pip3 install pymongo
操作MongoDB
基本过程:导入pymongo库,连接 MongoDB 服务器,指定相关数据库,指定相关集合(表),最后对数据进行增、删、改、查询或排序操作。
源代码:(从上而下,取消多行注释,逐条测试)
from pymongo import MongoClient
#import pymongo
#注意: 在 MongoDB 中,数据库只有在内容插入后才会创建! 就是说,数据库创建后要创建集合(数据表)并插入一条文档(记录),数据库才会真正创建。
#连接 MongoDB 服务器 方法一
#对应from pymongo import MongoClient
#client = MongoClient(host='localhost',port=27017) #方法一
#client=MongoClient('mongodb://localhost:27017/') #方法二
client=MongoClient('mongodb://admin:123456@localhost:27017/')#如果你设定过用户和密码
#连接 MongoDB 服务器 方法二
#对应import pymongo
#client=pymongo.MongoClient('mongodb://localhost:27017/')
#print(client.list_database_names()) #输出所有数据库
#方法一
#mydb=client.test #数据库
#mycol=mydb.学生名单 #集合,类似SQL的表
#方法二
mydb=client['通讯录数据库']
#print(mydb.collection_names()) #输出所有集合
mycol=mydb['学生名单']
'''
#增加一条
#mydict={'age': 101, 'name': '李四6', 'sex': False}
#print(mycol.insert_one(mydict))
#增加多条
mylist=[
{'age': 100, 'name': '李四7', 'sex': False},
{'age': 102, 'name': '李四8', 'sex': True}
]
m=mycol.insert_many(mylist)
print(m.inserted_ids)
#删除一条
myquery={'name':'李四8'}
mycol.delete_one(myquery)
#删除多条
myquery= {"age":{"$lte":53}}
#myquery= {} #删除所有
m=mycol.delete_many(myquery)
print(f'{m.deleted_count}被删除了')
#删除整个集合
mycol.drop()
#修改一条
myquery={'name':'李四6'}
newvalue={'$set':{'name':'李四3'}}
mycol.update_one(myquery,newvalue)
#修改多条
myquery={'name':'李四7'}
newvalue={'$set':{'name':'李四9'}}
mycol.update_many(myquery,newvalue)
#查询第一条
print(mycol.find_one())
#查询所有
for x in mycol.find():
#print(x)
print('年龄:{}'.format(x['age']))
#查询指定字段 0为仅显示此字段以外的字段
for x in mycol.find({},{'age':1}):
print(x)
#查询指定条件
#myquery={'sex':False}
myquery= {"age":{"$lte":53}}
for x in mycol.find(myquery):
print(x)
'''
#降序 默认1为顺序
for x in mycol.find().sort('age',-1):
print(x)
#统计数据条数
print(f'共查到{mycol.count_documents(filter={})}条记录')
print(f'共查到小于等于53岁的{mycol.count_documents(filter={"age":{"$lte":53}})}条记录')
#其他操作
#对索引进行操作相关方法有create_index()、create_indexes()和drop_index()等。
#有兴趣的同学可以自行练习
查询条件
从上面的例子,我们可以看到查询条件最为复杂,网上资料分享给大家。
符号 | 含义 | 示例 |
| 小于 |
|
| 大于 |
|
| 小于等于 |
|
| 大于等于 |
|
| 不等于 |
|
| 在范围内 |
|
| 不在范围内 |
|
例如,查找年龄为20的数据,则写法如下:
results = collection.find({'age': 20})
但是查询条件变为:年龄大于或等于20的数据,则写法如下:
results = collection.find({'age': {'$gte': 20}})
这里查询的条件键值已经不是单纯的数字了,而是一个字典,其键名为比较符号$gt,意思是大于,键值为20。
正则匹配查询
符号 | 含义 | 示例 | 示例含义 |
| 匹配正则表达式 |
|
|
| 属性是否存在 |
|
|
| 类型判断 |
|
|
| 数字模操作 |
| 年龄模5余0 |
| 文本查询 |
|
|
| 高级条件查询 |
| 自身粉丝数等于关注数 |
例如,查询名字以M开头的学生数据,则写法如下:
results = collection.find({'name': {'$regex': '^M.*'}})
这里使用$regex来指定正则匹配,^M.*代表以M开头的正则表达式。