首页 > 解决方案 > Mongodb upsert 文档或 $addToSet

问题描述

所以我试图找出最好的方法来做到这一点。我有一个文件转储,我放入一个集合中。这包括一个 ID 和一个作为数组的时间戳。基本上我想要完成的是,如果 ID 上存在冲突,我想将新时间戳推送到数组,否则我想更新整个文档。我不知道它是否会改变任何东西,但我正在使用 pymongo。

标签: python-3.xmongodbpymongoupsert

解决方案


如果您还想保留唯一的时间戳,则该$addToSet运算符可以与 upsert 一起使用。否则,当字段发生冲突时,$push运算符将用于将每个时间戳添加到数组的末尾。ID

实现此目的的示例查询如下:

from pymongo import MongoClient
from bson.objectid import ObjectId
from time import time

client = MongoClient()
db = client.experiments

id_ = ObjectId('5b6d2a8ed35b7caf9fde936f')
ts = time() + 300

db.sample.update_one(
    {'ID': id_}, # filter
    {'$addToSet': {'timestamp': ts}}, # update
    upsert=True
)

更多信息pymongo.collection.Collection.update_one记录在案。


推荐阅读