Python操作MongoDB

虽然经常使用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()

 

 

posted @ 2023-02-01 14:31  G先生  阅读(681)  评论(0编辑  收藏  举报

:guocheng