使用PyMongo使用update_one()执行UPSERT,同时为每个文档添加/设置一个新字段



我有一个python请求,返回json格式的api数据,如下所示:

[
{
'name': 'xyz',
'address': 'yyy'
},
{
'name': 'abc',
'address': 'ccc'
}
]

我想每天在MongoDB中加载这些数据,无论api json响应输出的地址是否发生了任何更改,以及json对象中每个name键的每次文档插入/更新时添加的日期时间戳字段,如下所示:

[
{ 
'id' : objectid(123456),
'name': 'xyz',
'address': 'yyy'
'dttm' : '2020-08-26:01:20:30'
},
{
'id' : objectid(123457),
'name': 'abc',
'address': 'ccc'
'dttm' : '2020-08-26:01:20:30'
}
{ 
'id' : objectid(123458),
'name': 'xyz',
'address': 'zzzzzzzzzzzzzzzzzzz'
'dttm' : '2020-09-26:03:01:20'
},
{
'id' : objectid(123459),
'name': 'abc',
'address': 'ccc'
'dttm' : '2020-09-26:03:02:30'
}
]

在上面的例子中;xyz";与上一次运行相比地址发生了变化,但名称";abc";没有更改,但仍加载不同的日期时间戳

样本代码:

import requests
import json
from pymongo import MongoClient
url='xxx'
header={'Auth':'xyz', 'Content-Type': 'application/json'}
payload={}
api_data = requests.request("POST", url, data=json.dumps(payload), headers=header).json()
client = MongoClient('mongodb://localhost:27017') 
db = client[test_db][test_collection]
db.update_one({api_data}, {$set:{dttm:datetime.today()}},{'upsert':True}) ##===>>what is the valid way to construct this using PyMongo ??
client.close()

您可以在更新文档中提供时间戳,它将在插入和更新时写入数据库。

有关upsert,请参阅pymongo中的快速或批量upsert。

最新更新