当前位置: 首页 > 科技观察

Python操作MongoDB基础讲解

时间:2023-03-13 00:56:54 科技观察

MongoDB是一个面向文档的非关系型数据库(NoSQL)。非关系数据库存储在键值对中。结构不固定,易于存储,减少时间和空间开销。文档数据库通常以JSON或XML格式存储数据,而Mongodb使用的数据结构是BSON,即二进制JSON。与JSON相比,BSON提高了存储和扫描效率,但占用更多空间。本文已经默认安装好MongoDB服务器,重点介绍Python操作MongoDB的库PyMongo。在命令行输入以下内容进行安装:#Windowspipinstallpymongo#Macpip3installpymongo1.连接服务器需要提供地址和接口importpymongoclient=pymongo.MongoClient(host='localhost',27017)#地址和端口也可以用字符串client=pymongo.MongoClient('mongodb://localhost:27017/')完成27017是默认端口。如果设置了密码连接,不能简单的使用上面的代码,需要在代码中带上密码:importpymongoclient=pymongo.MongoClient(host='localhost',27017)auth=mongo_client.adminauth.authenticate('username','Password')连接服务器,可以用下面的代码判断是否成功:print(client.server_info())2.获取数据库。数据库有两种表达方式(以数据库数据为例):#方法一db=client['data']#方法二db=client.data另外需要说明的是,MongoDB不需要预先创建一个数据库,但直接使用它。如果没有找到数据库,它会自动创建一个testdb数据库:db=client.testdb关系数据库中的集合类似于关系数据库中的表。获取集合类似于获取数据库。还有两种方法(以集合练习为例):collection=db['practice']#方法2collection=db.practice4.下面插入数据的操作已经默认通过代码获取了练习集合:importpymongoclient=pymongo.MongoClient(host='localhost',27017)db=client.datacollection=db.practice4.1插入单条数据数据格式为字典,可以通过insert_one写入单条数据:data={'name':'晨曦','text':'HelloWorld','tags':['a','b','c']}集合。insert_one(data)在MongoDB中,每条数据都有一个_id属性来唯一标识它。可以输出返回的id来确认数据:result=collection.insert_one(data)print(result.inserted_id)4.2插入多条数据如果有多条数据,每条数据的形式还是字典,但是需要组合成字典列表然后用insert_many()写:data1={'name':'Chenxi','text':'HelloWorld','tags':['a','b','c']}data2={'name':'早起','text':'HelloWorld','tags':['a','b','c']}collection.insert_many([data1,data2])五、删除数据5.1删除单项数据删除一条数据。如果有多条数据匹配相同的删除条件,则默认删除第一条。如果上面例子中插入的两条数据与{'text':'HelloWorld'}一致,那么通过delete_one删除第一条数据,保留数据{'name':'早起'}:collection.delete_one({'text':'HelloWorld'})5.2删除多条数据删除所有满足条件的数据。如果上例中插入的两条数据都符合{'text':'HelloWorld'},则通过delete_many将这两条数据全部删除:collection.delete_many({'text':'HelloWorld'})6.更新data6.1更新单条数据类似于删除单条数据,只会更新满足条件的第一条数据。代码为update_one(filter,update,upsert=False),其中第一个参数filter为更新条件,第二个参数update为更新内容,第三个参数upsert默认为False。如果为True,更新条件没有找到时,插入更新的内容data3={'name':'Xiaoming','text':'GoodbyeWorld','tags':[1,2,3]}update_condition={'name':'Chenxi'}collection.update_one(update_condition,{'$set':data3})6.2更新多条数据有了上面多条数据删除和插入的理解,就很好理解了更新多条数据的逻辑,满足条件的更新所有数据也是如此。data3={'name':'小明','text':'GoodbyeWorld','tags':[1,2,3]}update_condition={'text':'HelloWorld'}collection.update_many(update_condition,{'$set':data3})七、查询数据7.1查询满足第一个条件的单条数据结果。该结果以字典的形式返回。如果没有找到则返回Nonefind_result=collection.find_one({'text':'HelloWorld'})print(find_result)可以通过投影参数指定查询的字段:find_result=collection.find_one({'text':'HelloWorld'},projection={'_id':False,'name':True,'tags':False})print(find_result)7.2查询多条数据,返回所有满足条件的结果。返回后需要迭代获取每一个查询结果,每一个结果类型都是一个字典。与之前的增删改查不同,多条查询是find()find_result=collection.find({'text':'HelloWorld'})foriinfind_result:print(i)7.3查询删除代码是find_one_and_delete(filter,projection=None,sort=None,session=None,**kwargs),其中sort为元组列表类型,当查询匹配多条数据时,按照一定的条件进行排序,第一条函数返回时返回数据:find_condition={'text':'HelloWorld'}deleted_item=collection.find_one_and_delete(find_condition,sort=[('name',pymongo.DESCENDING)])print(deleted_item)查询也可以限制通过$查询范围,常见内容如下:img8,Count统计查询结果中有多少条数据,可以调用count()方法。具体操作如下:count=collection.find({'text':'HelloWorld'}).count()print(count)9.排序查询中,已经看到sort可以作为参数起到分拣作用。其实sort可以像计数方式一样直接跟查询:results=collection.find({'text':'HelloWorld'}).sort('name',pymongo.ASCENDING)print([result['name']forresultinresults])10.索引10.1创建索引插入数据时,已经有_id索引,但我们也可以创建自定义索引:collection.create_index('name',unique=True)10.2获取索引信息,可以使用index_information获取索引介绍:index_info=collection.index_information()print(index_info)10.3删除索引del_index=collection.drop_index(index_name)以上是Python操作MongoDB的一些基本用法。PyMongo更详细的使用方法可以自行参考官方文档。