【问题标题】:Perform UPSERT with update_one() using PyMongo while also adding/setting a new field with every document使用 PyMongo 使用 update_one() 执行 UPSERT,同时为每个文档添加/设置一个新字段
【发布时间】:2020-12-14 19:04:08
【问题描述】:

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

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

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

 { 
  '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()

【问题讨论】:

    标签: mongodb python-requests pymongo upsert


    【解决方案1】:

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

    有关更新插入,请参阅Fast or Bulk Upsert in pymongo

    【讨论】:

      猜你喜欢
      • 2017-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-21
      • 1970-01-01
      • 2020-07-04
      • 2017-11-10
      • 2020-05-10
      相关资源
      最近更新 更多