Pymongo:确定find_one_and_update返回的文档是否已更新或插入



我想知道find_one_and_update返回的文档是新的(插入的(还是更新的文档。

我的查询如下:

predicted_user = db.predictions.find_one_and_update({'emp_name': user_name}, 
{'$currentDate': {"createdAt": True}}, 
upsert=True, 
return_document=ReturnDocument.AFTER)

predicted_user可以是:

  1. 集合中的新用户,由于upsert.
  2. 由于
  3. update命令,其createdAt已更新的旧用户。

我想实现类似

if predicted_user is new:
# Do send notifications.
else:
# Don't send notifications.

以上可以通过多个查询来实现,但我想将其保留为单个(如果可能的话(。

您将需要实现文档版本控制。 例如,如果您将文档版本保留在_version字段中,则 update 参数可以是:

{
'$currentDate': { "createdAt": True }, 
'$inc': { '_version': 1 }, 
'$setOnInsert': { '_version': 0 }
} 

然后,您可以检查_version的值。对于更新插入的文档,它将为 0,对于更新的文档,它将高于此值的任何内容。

您需要更新现有文档以在部署期间手动添加字段:

{'$set': { '_version': 1 }}

相关内容

最新更新