MongoDB findOneAndReplace日志(如果作为新文档添加或替换)

MongoDB findOneAndReplace日志(如果作为新文档添加或替换),mongodb,mongodb-query,pymongo,Mongodb,Mongodb Query,Pymongo,我将mongo's与upsert=true和returnNewDocument=true 基本上是一种不插入重复项的方法。但是我想将新插入的文档(或旧的现有文档)的\u id传递给后台处理任务 但我还想记录文档是作为新文档添加的,还是发生了替换 我找不到任何方法可以将findOneAndReplace()与这些参数一起使用并回答这个问题 我唯一能想到的就是找到并插入两个不同的请求,这似乎有点适得其反 另外,我实际上在使用pymongo的find_one_and_replace(),但它似乎与JS

我将mongo's与
upsert=true
returnNewDocument=true

基本上是一种不插入重复项的方法。但是我想将新插入的文档(或旧的现有文档)的
\u id
传递给后台处理任务

但我还想记录文档是作为新文档添加的,还是发生了替换

我找不到任何方法可以将
findOneAndReplace()
与这些参数一起使用并回答这个问题

我唯一能想到的就是找到并插入两个不同的请求,这似乎有点适得其反

另外,我实际上在使用pymongo的
find_one_and_replace()
,但它似乎与JS mongo函数相同


编辑:为了澄清而编辑。

我现在要用python实现它的方式:


不能使用“替换”功能吗?在java中,我可以使用repalceOne返回UpdateResult。它有一种方法来查找文件是否已更新。我在pymongo看到repalce_one,它的行为应该是一样的。这是文件查找,用返回的新文件替换\u one

,您没有收到替换的文件吗?您应该能够从替换的文档中获取_id。可能是我不理解这个问题?我需要记录文档是作为新文档添加的,还是发生了替换。我使用findOneAndReplace是因为我的添加脚本变成了幂等元,但我仍然对添加的新内容感到好奇。
import pymongo

def find_one_and_replace_log(collection, find_query,
                             document_data,
                             log={}):
    ''' behaves like find_one_or_replace(upsert=True,
    return_document=pymongo.ReturnDocument.AFTER)
    '''
    is_new = False
    document = collection.find_one(find_query)
    if not document:
        # document didn't exist
        # log as NEW
        is_new = True
    new_or_replaced_document = collection.find_one_and_replace(
        find_query,
        document_data,
        upsert=True,
        return_document=pymongo.ReturnDocument.AFTER
    )
    log['new_document'] = is_new
    return new_or_replaced_document