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】:

获取UIDs 的列表在第一次更新之前,然后使用$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

MongoDB:使用pymongo在一个集合中删除多个文档中的数组值

如何使用 pymongo 更新值?

将 Null 项插入集合 Mongodb (Pymongo)