目录
[一、连接 MongoDB。](#一、连接 MongoDB。)
[二、Mongodb 创建数据库、创建集合。](#二、Mongodb 创建数据库、创建集合。)
[三、Python Mongodb 插入文档。](#三、Python Mongodb 插入文档。)
[(3)插入指定 _id 的多个文档。](#(3)插入指定 _id 的多个文档。)
[四、Python Mongodb 查询文档。](#四、Python Mongodb 查询文档。)
[五、Python Mongodb 修改文档。](#五、Python Mongodb 修改文档。)
[六、Python Mongodb 删除数据。](#六、Python Mongodb 删除数据。)
[七、Python Mongodb 排序 sort()。](#七、Python Mongodb 排序 sort()。)
一、连接 MongoDB。
- Python 连接 MongoDB 需要 MongoDB 驱动,这里使用 PyMongo 驱动进行连接。
- 第一步:pip 安装 PyMongo。
bashpip install pymongo
- 第二步:启动本地 MongoDB 服务。
自定义注册 MongoDB 服务
https://blog.csdn.net/m0_74363339/article/details/154385766?spm=1001.2014.3001.5501
- 第三步:使用 python 建立 MongoDB 连接。
pythonfrom pymongo import MongoClient try: #client = MongoClient("mongodb://localhost:27017/") # 无密码连接 client = MongoClient("mongodb://root:test123123@localhost:27017/") #启用security认证 client.close() except Exception as e: print(str(e))
二、Mongodb 创建数据库、创建集合。
- 创建数据库:mongodb_test、集合:employees。
- 注意:集合只有在内容插入后才会创建!也就是创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。
pythonfrom pymongo import MongoClient try: #client = MongoClient("mongodb://localhost:27017/") # 无密码连接 client = MongoClient("mongodb://root:test123123@localhost:27017/") #启用security认证 mydb = client["mongodb_test"] #不存在自动创建 print(f"当前数据库名:{mydb.name}") #当前数据库名:mongodb_test employees = mydb["employees"] #创建集合,类似mysql的表 print(f"当前集合名:{employees.name}") #当前集合名:employees #只有首次插入时,才会真正在磁盘上创建 if "employees" in mydb.list_collection_names(): print("集合已存在") else: print("集合不存在") #集合不存在 client.close() except Exception as e: print(str(e))
三、Python Mongodb 插入文档。
(1)插入单条文档:insert_one()。
- insert_one()方法的第一个参数是字典(key => value 对)。
- 插入文档时没有指定 _id,MongoDB 会为每个文档添加一个唯一的 id。
pythonfrom pymongo import MongoClient from pymongo.errors import PyMongoError #client = MongoClient("mongodb://localhost:27017/") # 无密码连接 client = MongoClient("mongodb://root:test123123@localhost:27017/") #启用security认证 mydb = client["mongodb_test"] #不存在自动创建 employees = mydb["employees"] #创建集合,类似mysql的表 try: #插入单条 emp1 = {"name":"张三","age":28,"department":"技术部","salary":8000} result = employees.insert_one(emp1) print(result) #InsertOneResult(ObjectId('69099433483dca40238ddd50'), acknowledged=True) print(f"文档id:{result.inserted_id}") #文档id:69099433483dca40238ddd50 except PyMongoError as e: print(str(e)) client.close()
- insert_one() 方法返回 InsertOneResult 对象,该对象包含 inserted_id 属性,它是插入文档的 id 值。
(2)批量插入多个文档:insert_many()。
- insert_many()方法的第一个参数是字典字典列表。
pythonfrom pymongo import MongoClient from pymongo.errors import PyMongoError #client = MongoClient("mongodb://localhost:27017/") # 无密码连接 client = MongoClient("mongodb://root:test123123@localhost:27017/") #启用security认证 mydb = client["mongodb_test"] #不存在自动创建 employees = mydb["employees"] #创建集合,类似mysql的表 try: #批量插入多条 emp_list = [ {"name": "李四", "age": 28, "department": "产品部", "salary": 9000}, {"name": "王五", "age": 30, "department": "技术部", "salary": 12000} ] insert_many_result = employees.insert_many(emp_list) print(f"插入的所有文档对应的 _id:{insert_many_result.inserted_ids}") #插入的所有文档对应的 _id:[ObjectId('690996ae2b10291d4e19dc7a'), ObjectId('690996ae2b10291d4e19dc7b')] except PyMongoError as e: print(str(e)) client.close()
- insert_many() 方法返回 InsertManyResult 对象,该对象包含 inserted_ids 属性,该属性保存着所有插入文档的 id 值。
(3)插入指定 _id 的多个文档。
pythonfrom pymongo import MongoClient from pymongo.errors import PyMongoError #client = MongoClient("mongodb://localhost:27017/") # 无密码连接 client = MongoClient("mongodb://root:test123123@localhost:27017/") #启用security认证 mydb = client["mongodb_test"] #不存在自动创建 employees = mydb["employees"] #创建集合,类似mysql的表 try: #手动指定_id,批量插入多条 emp_list = [ {"_id": 1, "name": "1", "age": 20, "department": "技术部", "salary": 6666}, {"_id": 2, "name": "2", "age": 20, "department": "技术部", "salary": 6666} ] insert_many_result = employees.insert_many(emp_list) print(f"插入文档所有 _id:{insert_many_result.inserted_ids}") #插入文档所有 _id:[1, 2] except PyMongoError as e: print(str(e)) client.close()
四、Python Mongodb 查询文档。
(1)查询单条文档:find_one()。
- find_one() 方法查询集合中的一条数据。
pythonfrom pymongo import MongoClient from pymongo.errors import PyMongoError #client = MongoClient("mongodb://localhost:27017/") # 无密码连接 client = MongoClient("mongodb://root:test123123@localhost:27017/") #启用security认证 mydb = client["mongodb_test"] #不存在自动创建 employees = mydb["employees"] #创建集合,类似mysql的表 try: #查询employees集合第一条数据 emp = employees.find_one() print(emp) #{'_id': ObjectId('69099433483dca40238ddd50'), 'name': '张三', 'age': 28, 'department': '技术部', 'salary': 8000} #查询单条,带条件 emp2 = employees.find_one({"name": "李四"}) #{'_id': ObjectId('690996ae2b10291d4e19dc7a'), 'name': '李四', 'age': 28, 'department': '产品部', 'salary': 9000} print(emp2) except PyMongoError as e: print(str(e)) client.close()
(2)查询所有文档:find()。
- find() 方法可以查询集合中的所有数据。类似 sql 中的 select* 操作。
pythonfrom pymongo import MongoClient from pymongo.errors import PyMongoError #client = MongoClient("mongodb://localhost:27017/") # 无密码连接 client = MongoClient("mongodb://root:test123123@localhost:27017/") #启用security认证 mydb = client["mongodb_test"] #不存在自动创建 employees = mydb["employees"] #创建集合,类似mysql的表 try: #查询employees集合所有数据 empList = employees.find() for emp in empList: print(emp) #条件查询 #$gt 大于 for emp in employees.find({"salary":{"$gt":8999}}): print(emp["name"],emp["salary"]) #李四 9000 \ 王五 12000 except PyMongoError as e: print(str(e)) client.close()
(3)查询指定字段的数据。
- 将要返回的字段对应值设置为 1。
- 注:除了 _id,你不能在一个对象中同时指定 0 和 1。也就是如果你设置了一个字段为 0,则其他都自动为 1,反之亦然。
pythonfrom pymongo import MongoClient from pymongo.errors import PyMongoError #client = MongoClient("mongodb://localhost:27017/") # 无密码连接 client = MongoClient("mongodb://root:test123123@localhost:27017/") #启用security认证 mydb = client["mongodb_test"] #不存在自动创建 employees = mydb["employees"] #创建集合,类似mysql的表 try: #查询employees集合所有数据 #第一个参数是筛选条件 #第二个参数是指定需返回的字段,1:返回,0:不返回,_id:默认返回 empList = employees.find({},{"name":1, "age":1}) for emp in empList: print(emp) #{'_id': ObjectId('69099433483dca40238ddd50'), 'name': '张三', 'age': 28} .... #不返回_id empList2 = employees.find({},{"name":1, "age":1, "_id":0}) for emp in empList2: print(emp) #{'name': '张三', 'age': 28} .... except PyMongoError as e: print(str(e)) client.close()
五、Python Mongodb 修改文档。
(1)更新单条文档:update_one()。
- update_one() 方法只能修匹配到的第一条记录。
pythonfrom pymongo import MongoClient from pymongo.errors import PyMongoError #client = MongoClient("mongodb://localhost:27017/") # 无密码连接 client = MongoClient("mongodb://root:test123123@localhost:27017/") #启用security认证 mydb = client["mongodb_test"] #不存在自动创建 employees = mydb["employees"] #创建集合,类似mysql的表 try: #更新前 for x in employees.find({"name":"王五"},{"name":1,"salary":1}): print(x) #{'_id': ObjectId('690996ae2b10291d4e19dc7b'), 'name': '王五', 'salary': 12000} #更新第一条满足条件的数据 myquery = {"name":"王五"} newvalues = {"$set":{"salary":15000}} result = employees.update_one(myquery,newvalues) ##执行单条更新 for x in employees.find({"name":"王五"},{"name":1,"salary":1}): print(x) #{'_id': ObjectId('690996ae2b10291d4e19dc7b'), 'name': '王五', 'salary': 15000} except PyMongoError as e: print(str(e)) client.close()
(2)修改所有匹配到的记录:update_many()。
- 若需修改所有匹配到的记录,可使用 update_many()方法。
pythonfrom pymongo import MongoClient from pymongo.errors import PyMongoError #client = MongoClient("mongodb://localhost:27017/") # 无密码连接 client = MongoClient("mongodb://root:test123123@localhost:27017/") #启用security认证 mydb = client["mongodb_test"] #不存在自动创建 employees = mydb["employees"] #创建集合,类似mysql的表 try: #更新前 for x in employees.find({"name":"王五"},{"name":1,"salary":1}): print(x) #{'_id': ObjectId('690996ae2b10291d4e19dc7b'), 'name': '王五', 'salary': 15000} #批量更新 #更新所有匹配到的记录 myquery = {"salary":{"$gt":5000}} newvalues = {"$inc":{"salary":1000}} #salary字段自增1000 result = employees.update_many(myquery,newvalues) #执行批量更新 print(f"匹配到:{result.matched_count} 条记录,{result.modified_count} 条记录已更新") #匹配到:5 条记录,5 条记录已更新 for x in employees.find({"name":"王五"},{"name":1,"salary":1}): print(x) #{'_id': ObjectId('690996ae2b10291d4e19dc7b'), 'name': '王五', 'salary': 16000} except PyMongoError as e: print(str(e)) client.close()
六、Python Mongodb 删除数据。
(1)删除一个文档:delete_one()。
- 使用 delete_one() 方法来删除一个文档,其中该方法第一个参数为查询对象,指定要删除哪些数据。
pythonfrom pymongo import MongoClient from pymongo.errors import PyMongoError #client = MongoClient("mongodb://localhost:27017/") # 无密码连接 client = MongoClient("mongodb://root:test123123@localhost:27017/") #启用security认证 mydb = client["mongodb_test"] #不存在自动创建 employees = mydb["employees"] #创建集合,类似mysql的表 try: #删除前 for x in employees.find({"name":"李四"},{"name":1,"salary":1}): print(x) #{'_id': ObjectId('690996ae2b10291d4e19dc7a'), 'name': '李四', 'salary': 10000} #删除单个 #删除首次匹配到的记录 myquery = {"name":"李四"} result = employees.delete_one(myquery) #执行单个删除 print(f"{result.deleted_count} 条记录已删除") #1 条记录已删除 after_delete = list(employees.find({"name":"李四"},{"name":1,"salary":1})) if not after_delete: print("删除成功") #删除成功 except PyMongoError as e: print(str(e)) client.close()
(2)删除多个文档:delete_many()。
- 用 delete_many() 方法来删除多个文档,其中该方法第一个参数为查询对象,指定要删除哪些数据。
pythonfrom pymongo import MongoClient from pymongo.errors import PyMongoError #client = MongoClient("mongodb://localhost:27017/") # 无密码连接 client = MongoClient("mongodb://root:test123123@localhost:27017/") #启用security认证 mydb = client["mongodb_test"] #不存在自动创建 employees = mydb["employees"] #创建集合,类似mysql的表 try: #删除前 for x in employees.find({"name":{"$regex":"^1"}},{"name":1,"salary":1}): #查询匹配name开头为1的 print(x) #{'_id': 1, 'name': '1', 'salary': 7666} \ {'_id': 2, 'name': '111', 'salary': 7666} #批量删除 myquery = {"name":{"$regex":"^1"}} result = employees.delete_many(myquery) print(f"{result.deleted_count} 个文档被删除") #2 个文档被删除 #删除后 for x in employees.find(): #查询当前所有数据 print(x) #{'_id': ObjectId('69099433483dca40238ddd50'), 'name': '张三', 'age': 28, 'department': '技术部', 'salary': 9000} / {'_id': ObjectId('690996ae2b10291d4e19dc7b'), 'name': '王五', 'age': 30, 'department': '技术部', 'salary': 16000} except PyMongoError as e: print(str(e)) client.close()
(3)删除集合:drop()。
pythonfrom pymongo import MongoClient from pymongo.errors import PyMongoError #client = MongoClient("mongodb://localhost:27017/") # 无密码连接 client = MongoClient("mongodb://root:test123123@localhost:27017/") #启用security认证 mydb = client["mongodb_test"] #不存在自动创建 employees = mydb["employees"] #创建集合,类似mysql的表 try: employees.drop() #删除集合 collections = mydb.list_collection_names() print(collections) #[] except PyMongoError as e: print(str(e)) client.close()
七、Python Mongodb 排序 sort()。
- sort() 方法可以指定升序或降序排序。
- sort() 方法第一个参数为要排序的字段,第二个字段指定排序规则,1 为升序,-1 为降序,默认为升序。
- 多字段排序:当第一个字段相同时,按第二个字段排序,其中 sort() 方法内需传入列表 [ (字段1,方式1) , (字段2,方式2) ]。
pythonfrom pymongo import MongoClient from pymongo.errors import PyMongoError #client = MongoClient("mongodb://localhost:27017/") # 无密码连接 client = MongoClient("mongodb://root:test123123@localhost:27017/") #启用security认证 mydb = client["mongodb_test"] #不存在自动创建 employees = mydb["employees"] #不存在则创建集合,类似mysql的表 try: #按薪资升序 asc_salary = employees.find({},{"name":1,"salary":1,"_id":0}).sort("salary") #默认升序,也可以手动设置:sort("salary",1) for emp in asc_salary: print(emp) # {'name': '1', 'salary': 100} # {'name': '2', 'salary': 5000} # {'name': 'Tom', 'salary': 8000.0} # {'name': '李四', 'salary': 9000} # {'name': '王五', 'salary': 12000} #按年龄降序 desc_age = employees.find({},{"name":1,"age":1,"_id":0}).sort("age",-1) for emp in desc_age: print(emp) # {'name': '王五', 'age': 30} # {'name': '李四', 'age': 28} # {'name': 'Tom', 'age': 18} # {'name': '2', 'age': 2} # {'name': '1', 'age': 1} except PyMongoError as e: print(str(e)) client.close()



