如何在Marklogic中使用xdmp:eval使用时间点查询?

如何在Marklogic中使用xdmp:eval使用时间点查询?,marklogic,marklogic-9,Marklogic,Marklogic 9,我已更改数据库的合并策略。其中,我将合并时间戳设置为当前时间戳(15181726371585905)。更改合并策略后,我更新了一个具有相同URI和集合的文档。现在,当我试图获取已删除的文档时,我无法获取它。我得到的是空序列 xdmp:eval("doc('/docs/test.xml')", (), <options xmlns="xdmp:eval"> <timestamp>{xdmp:request-timestamp()-1}</timestamp>

我已更改数据库的合并策略。其中,我将合并时间戳设置为当前时间戳(15181726371585905)。更改合并策略后,我更新了一个具有相同URI和集合的文档。现在,当我试图获取已删除的文档时,我无法获取它。我得到的是空序列

xdmp:eval("doc('/docs/test.xml')", (),
<options xmlns="xdmp:eval">
  <timestamp>{xdmp:request-timestamp()-1}</timestamp>
</options>)
xdmp:eval(“doc('/docs/test.xml'),(),
{xdmp:request-timestamp()-1}
)
如何使用上述查询获取已删除的单据


TIA。

将合并时间戳设置为当前时间会告诉服务器保留该点的片段。在设置新的合并时间戳值之前,系统中的所有文档在逻辑上都具有该时间之前的片段时间戳。因此,当您更新文档时,系统不再提供以前的版本(因为您说过从现在起只保留带有片段时间戳的文档)

一些参考资料:

  • (请参见合并时间戳的说明,因为它解释了各种设置的影响)

只是尝试了一下,得到了最新版本,而不是空序列。以下是我对您的理解:

您已经将时间戳设置为当前时间(t),然后插入了一个文档(在时间t+m),然后在相同的URI(在时间t+n)插入了文档的新版本。现在您希望从时间t+m检索文档

问题在于您为读取请求指定时间戳的方式:

<timestamp>{xdmp:request-timestamp()-1}</timestamp>
{xdmp:request-timestamp()-1}
您要求MarkLogic将时钟倒转一次,并将当时存在的文档提供给您。然而,时间戳确实与时钟时间相关;当数据库状态改变时,它们不仅仅是增量。来自MarkLogic的:

滴答声按每秒10000000滴答声计算

因此,从当前时间戳中减去一,你要求返回大约1/10000000秒

如果知道要查询数据库时的挂钟时间,可以使用查找相应的时间戳


另外,您还提出了一个关于堆栈溢出的问题,关于如何跟踪文档的多个版本。我想提醒您不要将时间点查询视为其中之一,如果您是这么想的话。为此,文档库服务或双时态文档是更好的解决方案。有关为什么不使用PIT查询进行版本控制的更多信息,我将向您介绍《管理员指南》的一节,特别是“禁用合并的危险”和“合并将改变分数”部分

我首先设置合并时间戳,然后插入一个文档。我也删除了同样的文档。现在,根据合并策略,这些已删除的文档应该存在于时间点查询中。那么,你能告诉我在上面的一组XQuery代码中我必须给出什么时间戳来检索删除/更新的文档吗?我已经浏览了所有链接,但没有任何帮助。你说你将合并时间戳设置为当前时间。然后,您插入了一个新文档。因此,旧片段(在“当前时间”设置之前插入/更新)不可用。。您告诉系统不要保留旧片段,方法是将合并时间设置为当前时间,然后更新文档。。这其中的困惑在哪里?也许我们彼此理解有误,因为我读了你上面的评论来描述一个与你文章不同的场景。您是在设置当前时间戳之前还是之后插入文档的?