Python 操作MongoDB 基础详解

MongoDB是一种面向文档型的非关系型数据库(NoSQL),非关系型数据库中是以键值对存储,结构不固定,易存储,减少时间和空间的开销

文档型数据库通常是以JSON或XML格式存储数据,而Mongodb使用的数据结构是BSON,即二进制JSON。和JSON相比,BSON提高储存和扫描效率,但空间占用会更多些。

本文默认已经安装MongoDB服务器,着重介绍Python操作MongoDB的库PyMongo,在命令行中输入如下内容安装:

# Window
pip install pymongo
# Mac
pip3 install pymongo

1. 连接服务器

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

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()) 

2.获取数据库

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

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

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

db = client.testdb

3. 获取集合

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

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

4. 插入数据

下面的操作进行前默认已经通过代码获取到了 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. 删除数据

5.1 删除单条数据

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

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

5.2 删除多条数据

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

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

6. 更新数据

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. 查询数据

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)

查询也可用通过 $ 限定查询范围,常用内容如下:
在这里插入图片描述

8. 计数

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

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

9. 排序

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

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

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 的详细用法,可以自行查阅官方文档。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值