python中pymongo库用法详解

python中pymongo库用法详解python 中 pymongo 库用法详解 pymongo

大家好,欢迎来到IT知识分享网。

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

pymongo 提供了mongdb和python交互的所有方法.

pymongo官方文档或源代码:PyMongo — MongoDB Drivers

python中pymongo库用法详解

1、pymongo安装

安装方式:

pip install pymongo

2、pymongo连接数据库

2.1 导入pymongo并选择要操作的集合

数据库和集合能够自动创建

2.2 无需权限认证的方式创建连接对象以及集合操作对象

from pymongo import MongoClient client = MongoClient(host,port) # 如果是本地连接host,port参数可以省略 collection = client[db名][集合名] # collection = client.db名.集合名 # 与上边用法相同 

2.3 需要权限认证的方式创建连接对象以及集合操作对象

from pymongo import MongoClient # 创建数据库连接对象 client = MongoClient('host', 27017) # 选择一个数据库 db = client['admin'] # 数据库中开了权限认证后,需要下一行代码 # 输入超级管理员账号和密码 db.authenticate('python', 'python') # 选择一个集合,没有的话会新建的 col = client['pydata']['test']
from pymongo import MongoClient my_client = MongoClient('192.168.124.49:27017') my_db = my_client['admin'] print(my_db) my_db.authenticate('root', '') my_col = my_client['test-mongo']['test_col'] print(my_col) 

也可以这样写:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col)

3、创建数据库

3.1 创建一个数据库

        创建数据库需要使用 MongoClient 对象,并且指定连接的 URL 地址和要创建的数据库名。

示例代码:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] print(my_db) 

运行结果:

python中pymongo库用法详解

注意: 在 MongoDB 中,数据库只有在内容插入后才会创建! 就是说,数据库创建后要创建集合(数据表)并插入一个文档(记录),数据库才会真正创建。

3.2 判断数据库是否已经存在

        可以读取 MongoDB 中的所有数据库,并判断指定的数据库是否存在。

 示例代码:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') # my_db = my_client['test-mongo'] # print(my_db) db_list = my_client.list_database_names() print(db_list) if "test-mongo" in db_list: print('数据库已经存在!') 

运行结果:

python中pymongo库用法详解

注意:database_names 在最新版本的 Python 中已废弃,Python3.7+ 之后的版本改为了 list_database_names()。

4、创建集合

        MongoDB 中的集合类似 SQL 的表。

4.1 创建一个集合

        MongoDB 使用数据库对象来创建集合。

示例代码:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] print(my_db) my_col = my_db['test_col'] print(my_col) 

运行结果:

python中pymongo库用法详解

注意: 在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。

注意:数据库创建和集合创建后,需要在集合(数据表)中插入一个文档(记录),数据库才会真正创建。

4.2 判断集合是否已经存在

        可以读取 MongoDB 数据库中的所有集合,并判断指定的集合是否存在。

示例代码:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) # my_col = my_db['test_col'] # print(my_col) col_list = my_db.list_collection_names() print(col_list) if 'test_col' in col_list: print("集合已经存在!") 

运行结果:

python中pymongo库用法详解

 注意:collection_names 在最新版本的 Python 中已废弃,Python3.7+ 之后的版本改为了 list_collection_names()。

5、mongodb添加数据

        MongoDB 中的一个文档类似 SQL 表中的一条记录。

5.1 插入集合

        集合中插入文档使用 insert_one() 方法,该方法的第一参数是字典键值对。

示例代码:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col) dic = {'name': 'dgw', 'age': 26, 'sex': '男'} data = my_col.insert_one(dic) print(data) 

运行结果:

python中pymongo库用法详解

python中pymongo库用法详解

5.2 返回_id段

        insert_one() 方法返回 InsertOneResult 对象,该对象包含 inserted_id 属性,它是插入文档的 id 值。

        如果在插入文档时没有指定 _id,MongoDB 会为每个文档添加一个唯一的 id

示例代码1:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col) dic = {'name': 'dgw2', 'age': 27, 'sex': '男'} data = my_col.insert_one(dic) print(data) print(data.inserted_id) 

运行结果:

python中pymongo库用法详解

python中pymongo库用法详解

示例代码2:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col) dic = {'_id': '', 'name': 'dgw2', 'age': 27, 'sex': '男'} data = my_col.insert_one(dic) print(data) print(data.inserted_id) 

运行结果:

python中pymongo库用法详解

python中pymongo库用法详解

5.3 插入多个文档

        集合中插入多个文档使用 insert_many() 方法,该方法的第一参数是字典列表。

        insert_many() 方法返回 InsertManyResult 对象,该对象包含 inserted_ids 属性,该属性保存着所有插入文档的 id 值。

示例代码:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col) col_list = [ {'name': 'dgw1', 'age': 27, 'sex': '男'}, {'name': 'dgw2', 'age': 26, 'sex': '男'}, {'name': 'dgw3', 'age': 25, 'sex': '男'}, {'name': 'dgw4', 'age': 28, 'sex': '男'} ] data = my_col.insert_many(col_list) print(data) print(data.inserted_ids) 

运行结果:

python中pymongo库用法详解

python中pymongo库用法详解

5.4 插入指定_id的多个文档

示例代码:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col) col_list = [ {'_id': '1', 'name': 'dgw1', 'age': 27, 'sex': '男'}, {'_id': '2', 'name': 'dgw2', 'age': 26, 'sex': '男'}, {'_id': '3', 'name': 'dgw3', 'age': 25, 'sex': '男'}, {'_id': '4', 'name': 'dgw4', 'age': 28, 'sex': '男'} ] data = my_col.insert_many(col_list) print(data) print(data.inserted_ids) 

运行结果:

python中pymongo库用法详解

python中pymongo库用法详解

5.5 使用insert()插入文档

        insert()可以批量的插入数据列表,也可以插入一条数据。

        inser()方法可能将会弃用!

语法结构如下:

collection.insert({一条数据}) collection.insert([{数据一},{数据二}])

示例代码1:  【插入一条文档】

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col) doc = {'name': 'dgw', 'age': 27} ret = my_col.insert(doc) print(ret) 

运行结果:

python中pymongo库用法详解

示例代码2:  【插入多条文档】

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col) docs = [ {'name': 'dgw', 'age': 27}, {'name': 'dgw2', 'age': 26} ] ret = my_col.insert(docs) print(ret) 

运行结果:

python中pymongo库用法详解

6、mongodb查询数据

        MongoDB 中使用了 find 和 find_one() 方法来查询集合中的数据,它类似于 SQL 中的 SELECT 语句。

接下来对test-mongo数据库中的test-col集合中的数据进行查询操作:

python中pymongo库用法详解

6.1 查询一条数据

        使用 find_one() 方法来查询集合中的一条数据。

示例代码:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col) data = my_col.find_one() print(data) 

运行结果:

python中pymongo库用法详解

6.2 查询集合中的所有数据

        find() 方法可以查询集合中的所有数据,类似 SQL 中的 SELECT * 操作。

        返回所有满足条件的结果,如果条件为空,则返回全部。结果是一个Cursor游标对象,是一个可迭代对象,可以类似读文件的指针,但是只能够进行一次读取。

示例代码:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col) datas = my_col.find() for data in datas: print(data) 

运行结果:

python中pymongo库用法详解

6.3 查询指定字段的数据 

        使用 find() 方法来查询指定字段的数据,将要返回的字段对应值设置为 1。

        除了 _id,不能在一个对象中同时指定 0 和 1,如果你设置了一个字段为 0,则其他都为 1,反之亦然。

        注意:除了_id外,同时指定0和1会报错。 

示例代码1:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col) datas = my_col.find({}, {'_id': 0, 'name': 1, 'age': 1}) for data in datas: print(data) 

运行结果:

python中pymongo库用法详解

示例代码2:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col) datas = my_col.find({}, {'name': 0}) for data in datas: print(data) 

运行结果:

python中pymongo库用法详解

6.4 根据指定条件查询

        在 find() 中设置参数来过滤数据。

示例代码:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col) query = {'name': 'dgw2'} # query = {'_id': '2'} datas = my_col.find(query) for data in datas: print(data) 

运行结果:

python中pymongo库用法详解

6.5 高级查询($gt、$gte等)

        可以使用修饰符。$gt、$gte等

示例代码:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col) # query = {'_id': {'$gt': '2'}} # query = {'age': {'$gte': 27}} query = {'name': {'$gte': 'dgw3'}} # query = {'_id': '2'} datas = my_col.find(query) print(datas) for data in datas: print(data) 

运行结果:

python中pymongo库用法详解

6.6 使用正则表达式$regex

        正则表达式修饰符只用于搜索字符串的字段。

示例代码:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col) # query = {'name': {'$regex': '^d'}} query = {'name': {'$regex': '3$'}} datas = my_col.find(query) print(datas) for data in datas: print(data) 

运行结果:

python中pymongo库用法详解

6.7 返回指定条数记录limit()

        对查询结果设置指定条数的记录可以使用 limit() 方法,该方法只接受一个数字参数。

示例代码:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col) datas = my_col.find().limit(3) print(datas) for data in datas: print(data) 

运行结果:

python中pymongo库用法详解

6.8 指定从哪条数据开始skip()

        对查询结果设置指定开始位置查询可以使用 skip() 方法,该方法只接受一个数字参数。

示例代码:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col) datas = my_col.find().skip(3) print(datas) for data in datas: print(data) print("*" * 100) datas2 = my_col.find().skip(3).limit(3) print(datas2) for data in datas2: print(data) 

运行结果:

python中pymongo库用法详解

6.9 排序sort()

        sort() 方法可以指定升序或降序排序。

        sort() 方法第一个参数为要排序的字段,第二个字段指定排序规则,1 为升序,-1 为降序,默认为升序。

示例代码:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col) document = my_col.find().sort('age', -1) for doc in document: print(doc) 

运行结果:

python中pymongo库用法详解

6.10 时间范围查询

        在MongoDB中,可以使用$gte和$lte运算符来进行时间范围查询。

        首先,需要将时间转换为MongoDB支持的日期格式(ISODate)。可以使用Python中的datetime模块来进行转换,例如:

import datetime start_time = datetime.datetime(2022, 1, 1) end_time = datetime.datetime(2022, 1, 31) start_time_iso = start_time.isoformat() end_time_iso = end_time.isoformat()

        这里将2022年1月1日和2022年1月31日转换为ISO日期格式。

        然后,可以使用$gte和$lte运算符来进行查询。假设有一个名为collection的集合,其中有一个名为timestamp的字段存储了时间信息,可以使用以下代码进行查询:

import pymongo client = pymongo.MongoClient() db = client['testdb'] collection = db['collection'] query = { 'timestamp': { '$gte': start_time_iso, '$lte': end_time_iso } } result = collection.find(query) for doc in result: print(doc)

        这里使用$gte和$lte运算符来查询timestamp字段在指定时间范围内的文档。查询结果是一个游标,可以使用for循环遍历结果并输出文档信息。

7、mongodb修改数据

接下来对test-mongo数据库中的test-col集合中的数据进行修改操作:

python中pymongo库用法详解

7.1 使用update_one()修改一条数据

        使用 update_one() 方法修改文档中的记录。该方法第一个参数为查询的条件,第二个参数为要修改的字段。

        如果查找到的匹配数据多于一条,则只会修改第一条。

        update_one()是局部更新替换,只需要替换更新需要修改的字段即可。

示例代码1:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col) query = {'_id': '1', 'name': 'dgw1'} new_value = {'$set': {'age': 21}} my_col.update_one(query, new_value) datas = my_col.find() for data in datas: print(data) 

运行结果:

python中pymongo库用法详解

示例代码2: 【使用db.update_one()更新一条数据】

from pymongo import MongoClient client = MongoClient('127.0.0.1', 27017) db = client['python_test']['students'] # print(db) for data in db.find(): print(data) print(data.values()) # 只需要放需要更新的字段,注意使用$进行操作 doument = {"$set": {'stu_no': , 'age': 25}} db.update_one({'stu_name': '张三'}, doument, upsert=True) for data in db.find(): print(data)

运行结果:

python中pymongo库用法详解

示例代码3:【使用update_one()时,对于不存在的字段是直接添加,存在的字段是更新】

# Requires pymongo 3.6.0+ from pymongo import MongoClient client = MongoClient("mongodb://root:@192.168.124.49:27017") database = client["test-mongo"] collection = database["test_col"] # Created with Studio 3T, the IDE for MongoDB - https://studio3t.com/ query = {} cursor = collection.find(query) update_value = {'$set': {'address': '北京市朝阳区', 'career': '程序员'}} try: for doc in cursor: print(doc) # collection.update_one(doc, update_value) collection.update_one({'_id': doc['_id']}, update_value) finally: client.close() print("*" * 100) cursor = collection.find(query) try: for doc in cursor: print(doc) finally: client.close() 

运行结果:

python中pymongo库用法详解

7.2 使用replace_one()修改一条数据

示例代码:

from pymongo import MongoClient client = MongoClient('127.0.0.1', 27017) db = client['python_test']['students'] # print(db) for data in db.find(): print(data) print(data.values()) # replace_one要求是所有数据,少一个key-value则报错 doument = {'stu_no': , 'stu_name': '张三', 'address': '山东省青岛市', 'phone_no': '', 'age': 26} db.replace_one({'stu_name': '张三'}, doument, upsert=True) for data in db.find(): print(data)

运行结果:

python中pymongo库用法详解

7.3 使用update_many()修改多条数据

        update_many()是局部更新替换,只需要替换更新需要修改的字段即可。

示例代码:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col) # query = {'name': {'$regex': '^d'}} query = {'name': 'dgw1'} new_value = {'$set': {'age': 23}} num = my_col.update_many(query, new_value) datas = my_col.find() for data in datas: print(data) print(f"已经更新{num.matched_count}条文档!") 

运行结果:

python中pymongo库用法详解

7.4 使用update()方法

        update()更新数据(全文档覆盖或指定键值,更新一条或多条)。

        update()方法将会被弃掉,使用update_one()、update_many()和replace_one()取代。

语法结构:

collection.update({条件}, {'$set':{指定的kv或完整的一条数据}}, multi=False/True, upsert=False/True)

参数说明:

  • multi参数:默认为False,表示更新一条; multi=True则更新多条。
  • multi参数必须和$set一起使用
  • upsert参数:默认为False,upsert=True则先查询是否存在,存在则更新;不存在就插入
  • $set表示指定字段进行更新

示例代码1:  【插入一条数据】【存在就更新,不存在就插入】

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col) doc = {"age": 36} ret = my_col.update({'_id': '2'}, {"$set": doc}, upsert=True) print(ret) 

运行结果:

python中pymongo库用法详解

python中pymongo库用法详解

示例代码2:  【插入多条数据】【存在就更新,不存在就插入】

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col) doc = {"age": 35} ret = my_col.update({'name': 'dgw2'}, {"$set": doc}, multi=True, upsert=True) print(ret) 

运行结果:

python中pymongo库用法详解

python中pymongo库用法详解

8、mongodb删除数据

接下来对test-mongo数据库中的test-col集合中的数据进行删除操作:

python中pymongo库用法详解

8.1 删除单个文档

        使用 delete_one() 方法来删除一个文档,该方法第一个参数为查询对象,指定要删除哪些数据。

        如果查询到多条数据,只会删除查询到的第一条数据。

示例代码1:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col) query = {'_id': '1', 'name': 'dgw1'} my_col.delete_one(query) document = my_col.find() for doc in document: print(doc) 

运行结果:

python中pymongo库用法详解

示例代码2:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col) query = {'name': 'dgw2'} my_col.delete_one(query) document = my_col.find() for doc in document: print(doc) 

运行结果:

python中pymongo库用法详解

8.2 删除多个文档数据

        使用 delete_many() 方法来删除多个文档,该方法第一个参数为查询对象,指定要删除哪些数据。

示例代码:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col) # query = {'name': {'$regex': '^d'}} query = {'name': 'dgw2'} num = my_col.delete_many(query) document = my_col.find() for doc in document: print(doc) print(f"{num.deleted_count}个文档已经被删除!") 

运行结果:

python中pymongo库用法详解

8.3 删除集合中的所有文档

        delete_many() 方法如果传入的是一个空的查询对象,则会删除集合中的所有文档:

示例代码:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col) num = my_col.delete_many({}) document = my_col.find() for doc in document: print(doc) print(f"{num.deleted_count}个文档已经被删除!") 

运行结果:

python中pymongo库用法详解

python中pymongo库用法详解

8.4 删除集合 

        使用 drop() 方法来删除一个集合。

示例代码:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col) my_col.drop() 

参考博文:

Python MongoDB | 菜鸟教程

Python Mongodb 插入文档 | 菜鸟教程

Python Mongodb 查询文档 | 菜鸟教程

Python Mongodb 修改文档 | 菜鸟教程

Python MongoDB 排序 | 菜鸟教程

Python Mongodb 删除数据 | 菜鸟教程

附录:

添加数据:

from pymongo import MongoClient my_client = MongoClient('mongodb://root:@192.168.124.49:27017') my_db = my_client['test-mongo'] # print(my_db) my_col = my_db['test_col'] # print(my_col) col_list = [ {'name': 'dgw1', 'age': 27, 'sex': '男'}, {'name': 'dgw2', 'age': 26, 'sex': '男'}, {'name': 'dgw3', 'age': 25, 'sex': '男'}, {'name': 'dgw4', 'age': 28, 'sex': '男'}, {'_id': '1', 'name': 'dgw1', 'age': 27, 'sex': '男'}, {'_id': '2', 'name': 'dgw2', 'age': 26, 'sex': '男'}, {'_id': '3', 'name': 'dgw3', 'age': 25, 'sex': '男'}, {'_id': '4', 'name': 'dgw4', 'age': 28, 'sex': '男'} ] # 插入多条数据 data = my_col.insert_many(col_list) print(data) print(data.inserted_ids) 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/114779.html

(0)
上一篇 2025-12-06 18:33
下一篇 2025-12-06 19:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信