温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python中怎么操作MongoDB数据库

发布时间:2021-07-10 16:45:09 来源:亿速云 阅读:128 作者:Leah 栏目:编程语言

这期内容当中小编将会给大家带来有关Python中怎么操作MongoDB数据库,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

一、连接服务器

连接服务器需要提供一个地址和接口

import pymongo client = pymongo.MongoClient(host='localhost', 27017) # 地址和端口也可以用一个字符串完成 client = pymongo.MongoClient('mongodb://localhost:27017/')

27017 是默认端口。如果设置过密码进行连接就不能简单使用上面的代码了,需要在代码中带上密码:

import pymongo client = pymongo.MongoClient(host='localhost', 27017) auth = mongo_client.admin auth.authenticate('用户名', '密码')

连接服务器可以用下面的代码判断是否成功:

print(client.server_info())

二、获取数据库

获取数据库有以下两种表述方法(以数据库 data 为例):

# 方法一 db = client['data'] # 方法二 db = client.data

另外需要说明,MongoDB不需要提前创建好数据库,而是直接使用,如果发现没有则自动创建一个 testdb 的数据库:

db = client.testdb

三、获取集合

关系型数据库中的集合类似于关系型数据库中的表获取集合与获取数据库类似,同样有两种方法(以集合 practice 为例):

collection = db['practice'] # 方法二 collection = db.practice

四、插入数据

下面的操作进行前默认已经通过代码获取到了 practice 集合:

import pymongo client = pymongo.MongoClient(host='localhost', 27017) db = client.data collection = db.practice

4.1 插入单条数据

数据形式是字典,可以通过 insert_one 完成单个数据的写入:

data = {     'name' : 'Chenxi',     'text' : 'Hello World',     'tags' : ['a', 'b', 'c'] } collection.insert_one(data)

在MongoDB中,每条数据都有_id属性来唯一标识。可以输出返回的id确认数据情况:

result = collection.insert_one(data) print(result.inserted_id)

4.2 插入多条数据

如果有多条数据,每条数据形式依然是字典,但需要组合成字典列表的形式后用 insert_many() 完成写入:

data1 = {     'name' : 'Chenxi',     'text' : 'Hello World',     'tags' : ['a', 'b', 'c'] } data2 = {     'name' : 'Zaoqi',     'text' : 'Hello World',     'tags' : ['a', 'b', 'c'] } collection.insert_many([data1, data2])

五、删除数据

5.1 删除单条数据

删除一条数据。若删除条件相同匹配到多条数据,默认删除第一条。如上例中插入的两条数据均符合 {'text' : 'Hello  World'} 那么通过 delete_one 会删除第一条数据,保留 {'name' : 'Zaoqi'} 这条数据:

collection.delete_one({'text' : 'Hello World'})

5.2 删除多条数据

删除满足条件的所有数据。如上例中插入的两条数据均符合 {'text' : 'Hello World'} 那么通过 delete_many  会删除全部两条数据:

collection.delete_many({'text' : 'Hello World'})

六、更新数据

6.1 更新单条数据

类似删除单条数据,只会更新满足条件的第一条数据。代码为  update_one(filter,update,upsert=False),其中第一个参数 filter为更新的条件,第二个参数 update  为更新的内容,第三个参数 upsert 默认 False, 若为 True 则当更新条件没找到时会插入更新的内容

data3 = {     'name': 'Xiaoming',     'text': 'Goodbye World',     'tags': [1, 2, 3] } update_condition = {'name' : 'Chenxi'}  collection.update_one(update_condition, {'$set' : data3})

6.2 更新多条数据

有了上面删除和插入多条数据的认识,就很好理解更新多条数据的逻辑了,同理也是更新符合条件的全部数据。

data3 = {     'name': 'Xiaoming',     'text': 'Goodbye World',     'tags': [1, 2, 3] } update_condition = {'text' : 'Hello World'}  collection.update_many(update_condition, {'$set' : data3})

七、查询数据

7.1 查询单条数据

匹配第一条满足的条件的结果,这条结果以字典形式返回,若没有查询到,则返回 None

find_result = collection.find_one({'text' : 'Hello World'}) print(find_result)

可以通过 projection 参数来指定需要查询的字段:

find_result = collection.find_one({'text' : 'Hello World'}, projection= {'_id':False, 'name':True, 'tags':False}) print(find_result)

7.2 查询多条数据

返回满足条件的所有结果,返回后需要通过迭代获取每个查询结果,每个结果类型为字典。和之前的增、删、改不类似,查询多条为  find()

find_result = collection.find({'text' : 'Hello World'}) for i in find_result:     print(i)

7.3 查询且删除

代码为  find_one_and_delete(filter,projection=None,sort=None,session=None,**kwargs),其中  sort为元祖列表类型,当查询匹配到多条数据时,根据某个条件排序,函数返回时返回第一条数据:

find_condition = {'text' : 'Hello World'} deleted_item = collection.find_one_and_delete(find_condition, sort= [('name', pymongo.DESCENDING)]) print(deleted_item)

查询也可以通过 $ 限定查询范围,常用内容如下:

Python中怎么操作MongoDB数据库

img

八、计数

要统计查询结果有多少条数据,可以调用 count() 方法。具体操作如下:

count = collection.find({'text' : 'Hello World'}).count() print(count)

九、排序

查询中已经看到 sort 可以作为参数发挥排序作用。实际上 sort 可以类似计数方法一样直接跟在查询的后面:

results = collection.find({'text' : 'Hello World'}).sort('name', pymongo.ASCENDING) print([result['name'] for result in results])

十、索引

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数据库了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI