目录
MongoDB数据库安装(注意自己的文件路径):MongoDB的安装配置教程(很详细,你想要的都在这里)_mongodb安装-CSDN博客
python语言使用该数据库要安装pymongo数据包:
打开
,conda install pymongo
在Pycharm右侧或者左下角找到下图1图标,然后按步骤进行。

之后改个数据源名称,MongoDB不需要密码(如果一直连接不上,可能是没启动MongoDB),若弹出要下载啥的,直接下载,之后点确定,就可在右侧看到之后对MongoDB的操作。

导入pymongo库,创建连接对象,指定数据库,指定集合(相对于mysql的表)
- import pymongo
-
- client = pymongo.MongoClient("mongodb://localhost:27017/") # 1、创建连接对象
- # client = pymongo.MongoClient(host='localhost', port=27017) # 同上效果
- db = client.test # 2、指定数据库test(会直接创建一个数据库)
- collection = db.students # 3、指定集合students
在右侧可看到结果如下(没出现,点击两个循环箭头的刷新就好):

在基本代码下进行以下操作。
collection.insert_one()插入一条数据(数据为字典),返回的是InsertOneResult 对象,可用inserted_id来获取_id;(个人认为,这里的_id相当于mysql的主键)
collection.insert_many()插入多条数据,参数为包含多个字典的列表。返回的是InsertManyResult 对象,可用inserted_ids来获取多个数据的_id;
- student1 = {
- 'id': '100',
- 'name': '小明',
- 'age': 20,
- 'gender': '男'
- }
- result1 = collection.insert_one(student1)
- print(result1, result1.inserted_id)
-
- student2 = {
- 'id': '101',
- 'name': '小红',
- 'age': 22,
- 'gender': '女'
- }
- student3 = {
- 'id': '102',
- 'name': '小强',
- 'age': 26,
- 'gender': '男'
- }
- result2 = collection.insert_many([student2, student3])
- print(result2, result2.inserted_ids)
结果如下:


使用collection.find_one()查询一条数据,参数是一个字典,返回一个字典,_id属性是自动添加的。
collection.find()可查询多条数据,返回一个生成器,用for 遍历出来结果。下面是查询年龄小于25岁的,这时需要比较符号。
- data = collection.find_one({"id": '101'})
- print(type(data), data)
-
- data2 = collection.find({'age': {'$lt': 25}})
- print(data2)
- for data in data2:
- print(data)

比较符号如下:

还可以进行正则匹配,需要功能符号,如下:

在sduents表中的数据为:

现要更新第一条数据的年龄,首先要知道这条数据的辨识条件conditon,之后使用 collection.update_one()去更改,第一个参数为conditon,第二个参数是个字典,要使用$set操作符作为键,值为数据对象及更改内容。
- condition = {'age': 20}
- result = collection.update_one(condition, {'$set': {‘age’: 30}})
- print(result) # 输出:
- # 上个输出不唯一,每次都可能不同
- print(result.matched_count, result.modified_count) # 匹配条数和影响条数 输出: 1 1

现要将年龄大于25岁学生年龄都加一,代码如下:
- condition = {'age': {'$gt': 25}}
- result = collection.update_many(condition, {'$inc': {'age': 1}})
- print(result)
- print(result.matched_count, result.modified_count) # 输出:2 2
结果如下:

如果该条件下的数据只要一条,使用update_many()会报错。
collection.remove()可删一条和多条数据,collection.delete_one()和collection.delete_many()删除一条和多条。
- result1 = collection.remove({'age': {'$lt': 25}}) # 也可删多条数据
- # collection.delete_one({'age': {'$lt':25}}) # 删一条
- # 上面的remove()方法官方不推荐使用,会报警告
- print(result1)
- result2 = collection.delete_many({'age': {'$gt': 25}})
- print(result2, result2.deleted_count)

初始集合:

以下代码在最初流程代码后进行。
- number1 = collection.find().count()
- print(number1) # 3
- number2 = collection.count() # 所有数据条数
- print(number2) # 3
- number3 = collection.find({'age':{'$lt': 25}}).count()
- print(number3) # 2
- # 上述都会报警告,但会正常进行
-
- number4 = collection.count_documents({'age': {'$lt': 25}})
- print(number4) # 不警告,但不加参数会报错
- results = collection.find().sort("id", pymongo.ASCENDING)
- # pymongo.ASCENDING为顺序,pymongo.DESCENDING为倒序
- for result in results:
- print(result, result['id'])

利用skip()方法跳过前几个,limit()方法会限制获取结果。现在对上述结果进行跳过第一个,只要一个结果:
- results = collection.find().sort("id", pymongo.DESCENDING).skip(1).limit(1)
- for result in results:
- print(result, result['id'])

本人新手,若有错误,欢迎指正;若有疑问,欢迎讨论。若文章对你有用,点个小赞鼓励一下,谢谢,一起加油吧!