MongoDB - PyMONGO 更新一个集合
Posted
技术标签:
【中文标题】MongoDB - PyMONGO 更新一个集合【英文标题】:MongoDB - PyMONGO update a collection 【发布时间】:2021-07-04 23:30:03 【问题描述】:收藏:
'_id': ObjectId('606df83ba9f0f494a6cf4e19'), 'UID': 'tt0069204', 'TYPE': 'movie', 'startYear': 2003
'_id': ObjectId('606df83ba9f0f494a6cf4e20'), 'UID': 'tt0085953', 'TYPE': 'movie', 'startYear': 2003
'_id': ObjectId('606df83ba9f0f494a6cf4e21'), 'UID': 'tt0069049', 'TYPE': 'movie', 'startYear': 2003
'_id': ObjectId('606df83ba9f0f494a6cf4e22'), 'UID': 'tt0091490', 'TYPE': 'movie', 'startYear': 2003
'_id': ObjectId('606df83ba9f0f494a6cf4e23'), 'UID': 'tt0100275', 'TYPE': 'movie', 'startYear': 2003
我需要对这个集合执行 3 次操作
1. Update the TYPE to be tvSeries for where the startyear = 2003
2. Select the documents from the productions collection where the TYPE = tvSeries
3. Using the UID value of the records whose TITLE_TYPE you edited above,
change the TYPE ‘realityShow’.
我被困在第三部分。不确定问题的第三部分是否有效。
对第 3 部分的任何帮助将不胜感激!
前两部分的mycode
import pymongo
import pprint
client=pymongo.MongoClient("mongodb://localhost:27017/")
db.client.database
collection=db.collection
myquery="startYear":2003
newvalues="$set": "TYPE":"tvSeries"
collection.update_many(myquery,newvalues)
for x in collection.find("TYPE":"tvSeries").limit(5):
pprint.pprint(x)
【问题讨论】:
【参考方案1】:获取UID
s 的列表在第一次更新之前,然后使用$in
执行第二次更新:
myquery = "startYear": 2003
newvalues = "$set": "TYPE": "tvSeries"
uids = [x.get('UID') for x in collection.find(myquery, 'UID': 1)]
collection.update_many(myquery, newvalues)
for x in collection.find("TYPE": "tvSeries").limit(5):
pprint.pprint(x)
collection.update_many('UID': '$in': uids, "$set": "TYPE": "realityShow")
【讨论】:
以上是关于MongoDB - PyMONGO 更新一个集合的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 python mongodb 客户端库(pymongo)更新 mongodb 集合中所有文档的字段“类型”
使用 pymongo 运行多个更新语句时,有时 MongoDB 不会更新
如何使用 html、pymongo 中的按钮更新 mongodb