我更改了数据库的合并策略。我将合并时间戳设置为当前 timesatmp(15181726371585905)。更改合并策略后,我使用相同的 URI 和集合更新了一份文档。现在,当我尝试获取已删除的文档时,我没有得到它。我收到空序列。
xdmp:eval("doc('/docs/test.xml')", (),
<options xmlns="xdmp:eval">
<timestamp>{xdmp:request-timestamp()-1}</timestamp>
</options>)
如何使用上述查询获取已删除的文档。
TIA。
最佳答案
刚刚尝试一下并获得最新版本,而不是空序列。这是我对你想要做的事情的理解:
您已将时间戳设置为当前时间 (t),然后插入文档(在时间 t + m),然后插入文档的新版本文档位于同一 URI(时间 t + n)。您现在想要检索时间 t + m 的文档。
问题在于您为读取请求指定时间戳的方式:
<timestamp>{xdmp:request-timestamp()-1}</timestamp>
您要求 MarkLogic 将时钟倒回一格并为您提供当时存在的文档。然而,时间戳确实与时钟时间相关。它们不仅仅在数据库状态发生变化时增加。来自 MarkLogic 的 Administrator's Guide :
The ticks are calculated at 10,000,000 ticks per second
因此,通过从当前时间戳中减去 1,您需要返回大约 1/10,000,000 秒。
如果您知道要查询数据库时的挂钟时间,则可以使用 xdmp:wallclock-to-timestamp
找到相应的时间戳。 .
顺便说一句,您还在 Stack Overflow 上提出了有关如何跟踪文档的多个版本的问题。我想提醒您不要将时间点查询视为其中之一,如果您有这样的想法的话。为此,文档库服务或双时态文档是更好的解决方案。有关为什么不使用 PIT 查询进行版本控制的更多信息,我建议您参阅 Overview of Merges管理员指南部分,特别是“禁用合并的危险”和“合并将改变分数”部分。
关于marklogic - 如何使用 xdmp :eval in Marklogic? 进行时间点查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48704318/