irpas技术客

Python操作MongoDB(全)_heaven&earth_mongodb python

irpas 7710

MongoDB

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

MongoDB 是目前最流行的 NoSQL 数据库之一,使用的数据类型 BSON(类似 JSON)。

?

安装?MongoDB(以Windows 平台为例)

网址:https://·/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()等。 #有兴趣的同学可以自行练习

?

查询条件

从上面的例子,我们可以看到查询条件最为复杂,网上资料分享给大家。

符号

含义

示例

$lt

小于

{'age': {'$lt': 20}}

$gt

大于

{'age': {'$gt': 20}}

$lte

小于等于

{'age': {'$lte': 20}}

$gte

大于等于

{'age': {'$gte': 20}}

$ne

不等于

{'age': {'$ne': 20}}

$in

在范围内

{'age': {'$in': [20, 23]}}

$nin

不在范围内

{'age': {'$nin': [20, 23]}}

例如,查找年龄为20的数据,则写法如下:

results?=?collection.find({'age':?20})??

但是查询条件变为:年龄大于或等于20的数据,则写法如下:

results?=?collection.find({'age':?{'$gte':?20}})?

这里查询的条件键值已经不是单纯的数字了,而是一个字典,其键名为比较符号$gt,意思是大于,键值为20。

?

正则匹配查询

符号

含义

示例

示例含义

$regex

匹配正则表达式

{'name': {'$regex': '^M.*'}}

name以M开头

$exists

属性是否存在

{'name': {'$exists': True}}

name属性存在

$type

类型判断

{'age': {'$type': 'int'}}

age的类型为int

$mod

数字模操作

{'age': {'$mod': [5, 0]}}

年龄模5余0

$text

文本查询

{'$text': {'$search': 'Mike'}}

text类型的属性中包含Mike字符串

$where

高级条件查询

{'$where': 'obj.fans_count == obj.follows_count'}

自身粉丝数等于关注数

例如,查询名字以M开头的学生数据,则写法如下:

results?=?collection.find({'name':?{'$regex':?'^M.*'}})?

这里使用$regex来指定正则匹配,^M.*代表以M开头的正则表达式。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #mongodb #Python #MongoDBMongoDB # #C #语言编写 #旨在为