虽然经常使用mongodb,但是很多方法都是现用现查,难得有时间,简单整理一下:
一、连接mongodb
安装第三方库:
pip install pymongo
连接到mongodb服务器:
import pymongo # host和port, myclient = pymongo.MongoClient('mongodb://localhost:27017/') # myclient = pymongo.MongoClient('mongodb://用户名:密码@host:port/') mydb = myclient["test"] # mysql的database mycol = mydb["comment"] # mysql的table
这里和mysql很相似,检查一下是否连接成功
dbs = myclient.list_database_names() #查看所有的database print(dbs)
结果如下:
['ItJuzi', 'admin', 'config', 'local', 'test']
如果出现如下错误:
pymongo.errors.OperationFailure: Authentication failed
可能有两个原因:
1、账号密码错误
2、账号的权限赋予错误,添加参数authSource,给与正确的权限
pymongo.MongoClient(host='xxxxx', port=xxxx, username='xxxxx', password='xxxx',authSource='xxxxx')
连接成功之后,就要进行增删改查
二、增
对于插入数据,mongo提供了多种方法,下面一一介绍:
2.1 insert
comment = {'uid': 1691971, 'website': '同程艺龙', 'hotel_id': '93195594', 'room_id': '0004', 'room_name': '豪华大床房', 'comment_id': '300531206', 'pubtime': '2021-05-06', 'comment': '几个朋友一起出来玩,第一次入住他们家,很满意的,早餐也不错', 'score': '5.0', 'environment': 0, 'facility': 0, 'service': 0, 'hygiene': 0, 'check_in': 0, 'label': '其它', 'user': '会员965342', 'user_title': '', 'imgs': '', 'click': 0, 'reply': 1} result = mycol.insert(comment) print(result)
返回结果如下:
609b8eb3c3eca4b703ef8de4 #这个相当于mysql的自增ID
查看一下存入的数据:
result = mycol.find() for item in result: print(item)
返回结果如下:
{'_id': ObjectId('609b8eb3c3eca4b703ef8de4'), 'uid': 1691971, 'website': '同程艺龙', 'hotel_id': '93195594', 'room_id': '0004', 'room_name': '豪华大床房', 'comment_id': '300531206', 'pubtime': '2021-05-06', 'comment': '几个朋友一起出来玩,第一次入住他们家,很满意的,早餐也不错', 'score': '5.0', 'environment': 0, 'facility': 0, 'service': 0, 'hygiene': 0, 'check_in': 0, 'label': '其它', 'user': '会员965342', 'user_title': '', 'imgs': '', 'click': 0, 'reply': 1}
发现返回的字段中多了一个_id,这个相当于mysql的主键自增ID,是mongo自动分配的。
假如要保存的数据包含了这个字段_id,mongo就不会分配了,使用相同的数据测试一下:
comment = {'_id':1, 'uid': 1691971, 'website': '同程艺龙', 'hotel_id': '93195594', 'room_id': '0004', 'room_name': '豪华大床房', 'comment_id': '300531206', 'pubtime': '2021-05-06', 'comment': '几个朋友一起出来玩,第一次入住他们家,很满意的,早餐也不错', 'score': '5.0', 'environment': 0, 'facility': 0, 'service': 0, 'hygiene': 0, 'check_in': 0, 'label': '其它', 'user': '会员965342', 'user_title': '', 'imgs': '', 'click': 0, 'reply': 1} result = mycol.insert(comment) print(result)
结果就返回了1。
接着查看一下存入的数据,发现结果如下:
{'_id': ObjectId('609b8eb3c3eca4b703ef8de4'), 'uid': 1691971, 'website': '同程艺龙', 'hotel_id': '93195594', 'room_id': '0004', 'room_name': '豪华大床房', 'comment_id': '300531206', 'pubtime': '2021-05-06', 'comment': '几个朋友一起出来玩,第一次入住他们家,很满意的,早餐也不错', 'score': '5.0', 'environment': 0, 'facility': 0, 'service': 0, 'hygiene': 0, 'check_in': 0, 'label': '其它', 'user': '会员965342', 'user_title': '', 'imgs': '', 'click': 0, 'reply': 1} {'_id': 1, 'uid': 1691971, 'website': '同程艺龙', 'hotel_id': '93195594', 'room_id': '0004', 'room_name': '豪华大床房', 'comment_id': '300531206', 'pubtime': '2021-05-06', 'comment': '几个朋友一起出来玩,第一次入住他们家,很满意的,早餐也不错', 'score': '5.0', 'environment': 0, 'facility': 0, 'service': 0, 'hygiene': 0, 'check_in': 0, 'label': '其它', 'user': '会员965342', 'user_title': '', 'imgs': '', 'click': 0, 'reply': 1}
相同的数据,不指定_id,它会继续插入,若指定_id重复的话就会报错。这和mysql很像。
2.2 insert_one
insert_one就是插入一条数据:
comment = {'uid': 1691971, 'website': '同程艺龙', 'hotel_id': '93195594', 'room_id': '0003', 'room_name': '豪华双床房', 'comment_id': '300790886', 'pubtime': '2021-05-07', 'comment': '服务热情,卫生干净', 'score': '5.0', 'environment': 0, 'facility': 0, 'service': 0, 'hygiene': 0, 'check_in': 0, 'label': '商务出差', 'user': '会员576175', 'user_title': '', 'imgs': '', 'click': 0, 'reply': 1} result = mycol.insert_one(comment) print(result)
打印结果:
<pymongo.results.InsertOneResult object at 0x0000023438B23908>
和insert方法返回的结果不同,该方法返回了一个对象,官方文档解释如下:
同样的数据:
comment = {'_id':2, 'uid': 1691971, 'website': '同程艺龙', 'hotel_id': '93195594', 'room_id': '0003', 'room_name': '豪华双床房', 'comment_id': '300790886', 'pubtime': '2021-05-07', 'comment': '服务热情,卫生干净', 'score': '5.0', 'environment': 0, 'facility': 0, 'service': 0, 'hygiene': 0, 'check_in': 0, 'label': '商务出差', 'user': '会员576175', 'user_title': '', 'imgs': '', 'click': 0, 'reply': 1} result = mycol.insert_one(comment) print(result.acknowledged) print(result.inserted_id)
结果如下:
True 2
2.3 insert_many
批量插入多个数据:
comments = [{'uid': 1691971, 'website': '同程艺龙', 'hotel_id': '93195594', 'room_id': '274396817', 'room_name': '标准双床房', 'comment_id': '300886162', 'pubtime': '2021-05-07', 'comment': '酒店服务很好,早餐很很好吃..推荐给你哦', 'score': '5.0', 'environment': 0, 'facility': 0, 'service': 0, 'hygiene': 0, 'check_in': 0, 'label': '团体', 'user': '会员9026', 'user_title': '', 'imgs': '', 'click': 0, 'reply': 1}, {'uid': 1691971, 'website': '同程艺龙', 'hotel_id': '93195594', 'room_id': '0005', 'room_name': '主题大床房', 'comment_id': '300838941', 'pubtime': '2021-05-07', 'comment': '小姐姐服务态度很优秀。隔音效果也很好', 'score': '5.0', 'environment': 0, 'facility': 0, 'service': 0, 'hygiene': 0, 'check_in': 0, 'label': '商务出差', 'user': '会员440692', 'user_title': '', 'imgs': '', 'click': 0, 'reply': 1}, {'uid': 1691971, 'website': '同程艺龙', 'hotel_id': '93195594', 'room_id': '0005', 'room_name': '主题大床房', 'comment_id': '300795544', 'pubtime': '2021-05-07', 'comment': '早餐丰盛。服务态度很好很热情', 'score': '5.0', 'environment': 0, 'facility': 0, 'service': 0, 'hygiene': 0, 'check_in': 0, 'label': '商务出差', 'user': '会员702964', 'user_title': '', 'imgs': '', 'click': 0, 'reply': 1}, ] result = mycol.insert_many(comments) print(result.acknowledged) print(result.inserted_ids)
insert_many的返回结果是pymongo.results.InsertManyResult
类,也具有两个属性: acknowledged 和 inserted_ids,打印结果:
True [ObjectId('609b95be615ba5a565637813'), ObjectId('609b95be615ba5a565637814'), ObjectId('609b95be615ba5a565637815')]
其实insert方法也可以用于批量插入:
comments = [{'uid': 1691971, 'website': '同程艺龙', 'hotel_id': '93195594', 'room_id': '79458312', 'room_name': '豪华大床房', 'comment_id': '301280892', 'pubtime': '2021-05-09', 'comment': '最佳选择地', 'score': '5.0', 'environment': 0, 'facility': 0, 'service': 0, 'hygiene': 0, 'check_in': 0, 'label': '独自旅行', 'user': '会员7939', 'user_title': '', 'imgs': '', 'click': 0, 'reply': 1}, {'uid': 1691971, 'website': '同程艺龙', 'hotel_id': '93195594', 'room_id': '0007', 'room_name': '特惠大床房', 'comment_id': '300904099', 'pubtime': '2021-05-07', 'comment': '服务热情,卫生干净,停车场方便', 'score': '5.0', 'environment': 0, 'facility': 0, 'service': 0, 'hygiene': 0, 'check_in': 0, 'label': '商务出差', 'user': '会员560352', 'user_title': '', 'imgs': '', 'click': 0, 'reply': 1}, {'uid': 1691971, 'website': '同程艺龙', 'hotel_id': '93195594', 'room_id': '79458312', 'room_name': '豪华大床房', 'comment_id': '300897608', 'pubtime': '2021-05-07', 'comment': '还可以,入住', 'score': '5.0', 'environment': 0, 'facility': 0, 'service': 0, 'hygiene': 0, 'check_in': 0, 'label': '商务出差', 'user': '会员3273', 'user_title': '', 'imgs': '', 'click': 0, 'reply': 1}, ] result = mycol.insert(comments) print(result)
结果如下:
[ObjectId('609b9652c05451e931289070'), ObjectId('609b9652c05451e931289071'), ObjectId('609b9652c05451e931289072')]
可以看出insert方法其实包括了insert_one方法和insert_many方法,只是官方不推荐使用insert方法。
2.4 save
当不指定_id字段时,相同的数据也会重复插入,如果不想这样,可以使用save方法。该方法和mysql的replace很相似,数据如果存在就更新,不存在就是插入。
comment = {'uid': 1691971, 'website': '同程艺龙', 'hotel_id': '93195594', 'room_id': '79458311', 'room_name': '豪华双床房', 'comment_id': '301859724', 'pubtime': '2021-05-12', 'comment': '环境非常不错', 'score': '5.0', 'environment': 0, 'facility': 0, 'service': 0, 'hygiene': 0, 'check_in': 0, 'label': '商务出差', 'user': '会员9552', 'user_title': '', 'imgs': '', 'click': 0, 'reply': 0} result = mycol.save(comment) print(result) result = mycol.save(comment) print(result)
相同的数据save两次,结果如下:
609b984b870ca29d04bd9d3e 609b984b870ca29d04bd9d3e
可以看出数据只存了一次。这里的相同是指:1、没有_id字段的话,其余所有的字段都相同。2、_id字段相同。
三、查
查询是最常见也是最复杂的操作,这里不深入研究了,只学习一下常用的一种查询。
3.1 find_one
find_one和mysql的fetchone方法相似,都是查询一条记录:
result = mycol.find_one() print(result)
结果如下:
{'_id': ObjectId('609b8eb3c3eca4b703ef8de4'), 'uid': 1691971, 'website': '同程艺龙', 'hotel_id': '93195594', 'room_id': '0004', 'room_name': '豪华大床房', 'comment_id': '300531206', 'pubtime': '2021-05-06', 'comment': '几个朋友一起出来玩,第一次入住他们家,很满意的,早餐也不错', 'score': '5.0', 'environment': 0, 'facility': 0, 'service': 0, 'hygiene': 0, 'check_in': 0, 'label': '其它', 'user': '会员965342', 'user_title': '', 'imgs': '', 'click': 0, 'reply': 1}
这里返回的是最先插入的那条数据。
3.2 find
find方法前面已经使用过了,是获取所有记录,和mysql的fetchall相似,这里不再演示。
3.3 查询指定字段
上面的查询是返回记录的所有字段,相当于mysql中的select *,若只需要部分字段可以这样做,将要返回的字段对应值设置为 1。:
result = mycol.find({},{'_id':0, "website": 1, "uid": 1,'comment':1 }) for item in result: print(item)
结果如下:
{'uid': 1691971, 'website': '同程艺龙', 'comment': '几个朋友一起出来玩,第一次入住他们家,很满意的,早餐也不错'} {'uid': 1691971, 'website': '同程艺龙', 'comment': '几个朋友一起出来玩,第一次入住他们家,很满意的,早餐也不错'} {'uid': 1691971, 'website': '同程艺龙', 'comment': '服务热情,卫生干净'} {'uid': 1691971, 'website': '同程艺龙', 'comment': '服务热情,卫生干净'} {'uid': 1691971, 'website': '同程艺龙', 'comment': '酒店服务很好,早餐很很好吃..推荐给你哦'} {'uid': 1691971, 'website': '同程艺龙', 'comment': '小姐姐服务态度很优秀。隔音效果也很好'} {'uid': 1691971, 'website': '同程艺龙', 'comment': '早餐丰盛。服务态度很好很热情'} {'uid': 1691971, 'website': '同程艺龙', 'comment': '最佳选择地'} {'uid': 1691971, 'website': '同程艺龙', 'comment': '服务热情,卫生干净,停车场方便'} {'uid': 1691971, 'website': '同程艺龙', 'comment': '还可以,入住'} {'uid': 1691971, 'website': '同程艺龙', 'comment': '环境非常不错'} {'uid': 1691970, 'website': '同程艺龙', 'comment': '环境非常不错'} {'uid': 1691970, 'website': '同程艺龙', 'comment': '不错的酒店,服务不错'}
注意:这里find方法接收了两个参数,第一个参数是{},这个是查询条件,这里为空;第二个参数是要返回的字段,将要返回的字段置成1,其他字段可以不用设置,默认成0。如果将不需要返回的字段设置成0,那么其他字段默认成1,而_id字段默认是1,不想要这个字段可以置成0。所以说第二个参数除了_id字段可以任意设置,其他字段必须是同一个值:0或者1。
3.4、指定查询条件
这个相当于mysql的查询语句后面的where条件,也是find方法的第一个参数。
3.4.1、等于查询
result = mycol.find({'_id':1},{"website": 1, "uid": 1,'comment':1,'comment_id':1 }) for item in result: print(item)
结果:
{'_id': 1, 'uid': 1691971, 'website': '同程艺龙', 'comment_id': '300531206', 'comment': '几个朋友一起出来玩,第一次入住他们家,很满意的,早餐也不错'}
注意如果是mongo分配的_id,不能直接查询,需要如下操作:
from bson.objectid import ObjectId result = mycol.find({'_id':ObjectId('609b8eb3c3eca4b703ef8de4')},{"website": 1, "uid": 1,'comment':1,'comment_id':1 })
多个条件and查询
result = mycol.find({'hotel_id': '93195594', 'comment_id': '300790886'},{"website": 1, "uid": 1,'comment':1,'comment_id':1 }) for item in result: print(item)
结果如下:
{'_id': ObjectId('609b926011f404557ebf50d2'), 'uid': 1691971, 'website': '同程艺龙', 'comment_id': '300790886', 'comment': '服务热情,卫生干净'} {'_id': 2, 'uid': 1691971, 'website': '同程艺龙', 'comment_id': '300790886', 'comment': '服务热情,卫生干净'}
注意:查询条件的类型和数据的类型一致。
多个条件or查询
query = { "$or": [ {"comment_id": '300790886'}, {"room_id": '79458311'} ] } result = mycol.find(query,{"website": 1, "uid": 1,'comment':1,'comment_id':1 })
结果如下:
{'_id': ObjectId('609b926011f404557ebf50d2'), 'uid': 1691971, 'website': '同程艺龙', 'comment_id': '300790886', 'comment': '服务热情,卫生干净'} {'_id': 2, 'uid': 1691971, 'website': '同程艺龙', 'comment_id': '300790886', 'comment': '服务热情,卫生干净'} {'_id': ObjectId('609b984b870ca29d04bd9d3e'), 'uid': 1691971, 'website': '同程艺龙', 'comment_id': '301859724', 'comment': '环境非常不错'} {'_id': ObjectId('609b98e02f3edfb2e53da405'), 'uid': 1691970, 'website': '同程艺龙', 'comment_id': '301859724', 'comment': '环境非常不错'}
or查询使用"$or"将多个条件放在一个list中。
3.4.2 比较查询
常用的比较查询有以下几种:
1、$gt:大于
2、$lt:小于
3、$gte:大于或等于
4、$lte:小于或等于
5、$ne:不等于
6、in 和 not in ($in $nin)
query = {"pubtime": {"$gt":'2021-05-07', '$lt':'2021-05-10'}} result = mycol.find(query,{"uid": 1,'comment':1,'comment_id':1,'pubtime': 1 })
结果如下:
{'_id': ObjectId('609b9652c05451e931289070'), 'uid': 1691971, 'comment_id': '301280892', 'pubtime': '2021-05-09', 'comment': '最佳选择地'} {'_id': 3, 'uid': 1691970, 'comment_id': '301365029', 'pubtime': '2021-05-09', 'comment': '不错的酒店,服务不错'}
使用$in的操作如下:
query = {"pubtime": {"$gt":'2021-05-07', '$lt':'2021-05-10'}, "uid":{"$in":[1691971,1691970]}} result = mycol.find(query,{"uid": 1,'comment':1,'comment_id':1,'pubtime': 1 })
结果和上面相同
也可以这样查询
query = {"_id": {"$gt":ObjectId('609b9652c05451e931289070')}} result = mycol.find(query,{"uid": 1,'comment':1,'comment_id':1,'pubtime': 1 })
3.4.3 模糊查询
模糊查询和mysql的like或者正则函数相似,也是通过正则查询实现的。
query = { "comment": { "$regex": "不错" }, "pubtime": { "$regex": "[0-9]{4}-[0-9]{2}-06" } } result = mycol.find(query,{"uid": 1,'comment':1,'comment_id':1,'pubtime': 1 })
结果如下:
{'_id': ObjectId('609b8eb3c3eca4b703ef8de4'), 'uid': 1691971, 'comment_id': '300531206', 'pubtime': '2021-05-06', 'comment': '几个朋友一起出来玩,第一次入住他们家,很满意的,早餐也不错'} {'_id': 1, 'uid': 1691971, 'comment_id': '300531206', 'pubtime': '2021-05-06', 'comment': '几个朋友一起出来玩,第一次入住他们家,很满意的,早餐也不错'}
这个正则就是python的re正则。
3.4.4 聚合查询
聚合查询就是mysql的group by。只是mongo的聚合查询使用的是aggregate方法,而且比较复杂。先看简单的例子:
query = {"$group":{"_id":"$pubtime"}} result = mycol.aggregate([query]) for item in result: print(item)
结果如下:
{'_id': '2021-05-06'} {'_id': '2021-05-09'} {'_id': '2021-05-07'} {'_id': '2021-05-12'}
假如想要先查询,之后在聚合,就是mysql查询语句where后面跟着group by:
query = [ {'$match':{'pubtime':{'$gte':'2021-05-07'}}}, {"$group":{"_id":"$room_id",'count':{'$sum':1}}}] result = mycol.aggregate(query)
结果如下:
{'_id': '0005', 'count': 2} {'_id': '79458311', 'count': 2} {'_id': '0007', 'count': 1} {'_id': '79458312', 'count': 2} {'_id': '0003', 'count': 2} {'_id': '274396817', 'count': 1} {'_id': '0004', 'count': 1}
注意:要聚合的字段必须是"_id"的值,而查询使用的是match,和find的用法相同。还有更复杂的聚合条件,这里不再学习了,用的时候再研究。
3.4.5 结果排序
上面介绍到的结果有两种:一种是查询,一种是聚合。
接着上面的例子,先学习聚合结果的排序:
query = [ {'$match':{'pubtime':{'$gte':'2021-05-07'}}}, {"$group":{"_id":"$room_id",'count':{'$sum':1}}}, {"$sort":{'count':-1}}] result = mycol.aggregate(query)
在query中增加{"$sort":{'count':-1}}项,-1表示按count降序输入:
{'_id': '0005', 'count': 2} {'_id': '79458311', 'count': 2} {'_id': '79458312', 'count': 2} {'_id': '0003', 'count': 2} {'_id': '0004', 'count': 1} {'_id': '0007', 'count': 1} {'_id': '274396817', 'count': 1}
下面学习查询的结果排序,这个更简单:
query = { "comment": { "$regex": "不错" }} result = mycol.find(query,{"uid": 1,'comment':1,'comment_id':1,'pubtime': 1 }).sort('_id', 1)
结果:
{'_id': 1, 'uid': 1691971, 'comment_id': '300531206', 'pubtime': '2021-05-06', 'comment': '几个朋友一起出来玩,第一次入住他们家,很满意的,早餐也不错'} {'_id': 3, 'uid': 1691970, 'comment_id': '301365029', 'pubtime': '2021-05-09', 'comment': '不错的酒店,服务不错'} {'_id': ObjectId('609b8eb3c3eca4b703ef8de4'), 'uid': 1691971, 'comment_id': '300531206', 'pubtime': '2021-05-06', 'comment': '几个朋友一起出来玩,第一次入住他们家,很满意的,早餐也不错'} {'_id': ObjectId('609b984b870ca29d04bd9d3e'), 'uid': 1691971, 'comment_id': '301859724', 'pubtime': '2021-05-12', 'comment': '环境非常不错'} {'_id': ObjectId('609b98e02f3edfb2e53da405'), 'uid': 1691970, 'comment_id': '301859724', 'pubtime': '2021-05-12', 'comment': '环境非常不错'}
3.4.6 结果条数限制
就是mysql中的offset和limit
直接使用上面的例子:
query = { "comment": { "$regex": "不错" }} result = mycol.find(query,{"uid": 1,'comment':1,'comment_id':1,'pubtime': 1 }).sort('_id', 1).skip(1).limit(3)
就是再加上.skip(1).limit(3),其中skip就是offset。
关于查询还有很多高级的复杂的方法,就不学习了。
四、改
上面讲的save其实也可以是一种更新操作,不过是以_id或者hash为条件的更新,mongo也提供了下面的更新方法:
4.1 update_one
该方法用于更新一条记录,该方法第一个参数为查询的条件,第二个参数为要修改的字段。如果查找到的匹配数据多于一条,则只会修改第一条。
myquery = { 'uid': 1691970} result = mycol.find_one(myquery) print(result) # 原结果 newvalues = { "$set": { "score": "4.5", "new_add":1 } } result = mycol.update_one(myquery, newvalues) print(result) # 更新返回结果 print(result.acknowledged) # 是否写入 print(result.matched_count) # 与此更新匹配的文档数。 print(result.modified_count) #修改的文档数。 result = mycol.find_one(myquery) print(result)
结果如下:
{'_id': ObjectId('609b98e02f3edfb2e53da405'), 'uid': 1691970, 'website': '同程艺龙', 'hotel_id': '93195594', 'room_id': '79458311', 'room_name': '豪华双床房', 'comment_id': '301859724', 'pubtime': '2021-05-12', 'comment': '环境非常不错', 'score': '5.0', 'environment': 0, 'facility': 0, 'service': 0, 'hygiene': 0, 'check_in': 0, 'label': '商务出差', 'user': '会员9552', 'user_title': '', 'imgs': '', 'click': 0, 'reply': 0} <pymongo.results.UpdateResult object at 0x000001B7679A2648> True 1 1 {'_id': ObjectId('609b98e02f3edfb2e53da405'), 'uid': 1691970, 'website': '同程艺龙', 'hotel_id': '93195594', 'room_id': '79458311', 'room_name': '豪华双床房', 'comment_id': '301859724', 'pubtime': '2021-05-12', 'comment': '环境非常不错', 'score': '4.5', 'environment': 0, 'facility': 0, 'service': 0, 'hygiene': 0, 'check_in': 0, 'label': '商务出差', 'user': '会员9552', 'user_title': '', 'imgs': '', 'click': 0, 'reply': 0, 'new_add': 1}
可以发现字段已经修改和新增。注意:matched_count是匹配到的文档数,但是使用update_one方法,只能匹配一条,故该值为1。
4.2 update_many
符合条件的记录全部更新,将上面例子的update_one直接修改成update_many。结果如下:
<pymongo.results.UpdateResult object at 0x00000204502126C8> True 11 10
五、删
删除方法并不常用,简单了解就行。
5.1 删除字段
result = mycol.update_one({},{"$unset":{'imgs':''}}) print(result) result = mycol.find()
结果如下:
<pymongo.results.UpdateResult object at 0x00000244E9572648> {'_id': ObjectId('609b8eb3c3eca4b703ef8de4'), 'uid': 1691971, 'website': '同程艺龙', 'hotel_id': '93195594', 'room_id': '0004', 'room_name': '豪华大床房', 'comment_id': '300531206', 'pubtime': '2021-05-06', 'comment': '几个朋友一起出来玩,第一次入住他们家,很满意的,早餐也不错', 'score': '4.5', 'environment': 0, 'facility': 0, 'service': 0, 'hygiene': 0, 'check_in': 0, 'label': '其它', 'user': '会员965342', 'user_title': '', 'click': 0, 'reply': 1}
可以发现imgs字段已经删除,注意update_one只删除符合条件的一条记录,想删除所有记录需要使用update_many。
5.2 删除记录
可以使用delete_one()方法来删除一个文档,该方法第一个参数为查询对象,指定要删除哪些数据。
myquery = {'comment_id': '300531206'} result = mycol.delete_one(myquery) print(result.deleted_count) # 删除文档的个数
可以使用delete_many()方法来删除多个文档,该方法第一个参数为查询对象,指定要删除哪些数
myquery = {} result = mycol.delete_many(myquery) print(result.deleted_count) result = mycol.find() for item in result: print(item)
5.3 删除集合
可以使用drop()方法来删除一个集合
mycol.drop()
标签:comment,website,uid,Python,MongoDB,1691971,result,操作,id From: https://www.cnblogs.com/geogre123/p/17082517.html