【发布时间】:2019-09-20 03:58:46
【问题描述】:
当我更新MongoDB 中的文档时,我可以指定是要返回原始文档还是新更新的文档。例如,使用PyMongo,我可以调用:
user = db['users'].find_one_and_update(
{'email': email},
{'$set': {'last_login': time.time()}},
return_document=ReturnDocument.AFTER
)
我也可以使用ReturnDocument.BEFORE
有没有办法让 single mongo 查询同时返回原始值和新值?
【问题讨论】:
-
您可以避免第二次查询来获取最新的。返回 BEFORE 文档并保留使用 variables 更新的属性。使用这些变量来修改 BEFORE 文档以获取 AFTER 文档。但是,这仅适用于单线程应用程序。
-
如前所述,只需返回“BEFORE”修改状态,然后应用您的“更改”即可为您提供“修改后”。即使使用
$inc之类的东西,该文档也被操作有效地“锁定以进行更新”,因此除了您的“更新”之外,没有任何东西可以修改该“之前”状态。 -
@mintekhab 操作所固有的
findAndModify命令的实际工作方式对“单线程”没有任何限制。没有其他东西可以修改文档,因此“之后”状态会因“之前”和“那个更新”中所做的修改的组合而不同。 -
@poundifdef,如何更新问题以在更新中使用
$currentDate?我认为这会更清楚地说明问题。