我如何在 pymongo 中 update/add 多个数据库?
How do I update/add multiple DBs in pymongo?
公告板被抓取并存储在 MongoDB 中 Python pymongo。
如果缺少数据,我们想添加数据;如果数据存在且值不同,我们想更新它。
我该怎么做?
前一个代码
b = dict(title=thread_title, url=thread_url, res=sorted(all_res))
collection.insert(b)
尝试代码
collection.update_one({"$set":{"title": thread_title}}, {"$set":{"url": thread_url}}, {"$set":{"res": sorted(all_res)}}, upsert=True)
错误代码
TypeError Collection.update_one() got multiple values for argument
'upsert'
大约有 200 个 MongoDB 文档可用。
_id 62459b8d6ebc7c7b3e14b3ad
field:title "THREAD TITLE"
field:url "URLURLURL"
field:res Array 0 "#100 2022/02/20 13:22 comment blah blah blah" 1
"#101 2022/02/20 13:23 comment blah blah blah"
如果您尝试 'separate' 您的行代码,您会看到您为函数提供了 4 个参数,您提供的每个参数集都是一个参数,因此 upsert
将作为值 {"$set":{"res": sorted(all_res)}}
,你不应该分开 'update' 参数
除此之外,update_one 函数采用过滤器(它不是可选参数,您应该始终提供过滤器)。
有update_one函数的定义
update_one(filter, update, upsert=False, bypass_document_validation=False, collation=None, array_filters=None, hint=None, session=None)
最后,如果你想同时更新多个实例,你应该考虑 update_many 函数(它基本上与 update_one 的工作方式相同)。
这段代码应该可以工作,记得添加一个过滤器。
collection.update_one(
{
# your filter here for exemple
"id" : id
},
{
"$set":{
"title": thread_title,
"url": thread_url,
"res": sorted(all_res)
}
},
upsert=True)
mongo update official document
在您的更新查询中缺少过滤器部分:
collection.update_one(
{
// Your selection criteria for the update. The same query selectors as in the find() method
"_id" : ObjectId("62459b8d6ebc7c7b3e14b3ad") //for example
},
{
"$set":{
"title": thread_title,
"url": thread_url,
"res": sorted(all_res)
},
upsert=True
})
以上查询将更新您 collection
中 id = 62459b8d6ebc7c7b3e14b3ad 的文档
公告板被抓取并存储在 MongoDB 中 Python pymongo。
如果缺少数据,我们想添加数据;如果数据存在且值不同,我们想更新它。
我该怎么做?
前一个代码
b = dict(title=thread_title, url=thread_url, res=sorted(all_res))
collection.insert(b)
尝试代码
collection.update_one({"$set":{"title": thread_title}}, {"$set":{"url": thread_url}}, {"$set":{"res": sorted(all_res)}}, upsert=True)
错误代码
TypeError Collection.update_one() got multiple values for argument 'upsert'
大约有 200 个 MongoDB 文档可用。
_id 62459b8d6ebc7c7b3e14b3ad
field:title "THREAD TITLE"
field:url "URLURLURL"
field:res Array 0 "#100 2022/02/20 13:22 comment blah blah blah" 1 "#101 2022/02/20 13:23 comment blah blah blah"
如果您尝试 'separate' 您的行代码,您会看到您为函数提供了 4 个参数,您提供的每个参数集都是一个参数,因此 upsert
将作为值 {"$set":{"res": sorted(all_res)}}
,你不应该分开 'update' 参数
除此之外,update_one 函数采用过滤器(它不是可选参数,您应该始终提供过滤器)。
有update_one函数的定义
update_one(filter, update, upsert=False, bypass_document_validation=False, collation=None, array_filters=None, hint=None, session=None)
最后,如果你想同时更新多个实例,你应该考虑 update_many 函数(它基本上与 update_one 的工作方式相同)。
这段代码应该可以工作,记得添加一个过滤器。
collection.update_one(
{
# your filter here for exemple
"id" : id
},
{
"$set":{
"title": thread_title,
"url": thread_url,
"res": sorted(all_res)
}
},
upsert=True)
mongo update official document
在您的更新查询中缺少过滤器部分:
collection.update_one(
{
// Your selection criteria for the update. The same query selectors as in the find() method
"_id" : ObjectId("62459b8d6ebc7c7b3e14b3ad") //for example
},
{
"$set":{
"title": thread_title,
"url": thread_url,
"res": sorted(all_res)
},
upsert=True
})
以上查询将更新您 collection
中 id = 62459b8d6ebc7c7b3e14b3ad 的文档