我想查询marklogic以获取集合中最近3分钟内已更新的文档。
我尝试为该要求编写结构化查询,但该查询仅接受dateTime的硬编码值,而不接受fn:current-dateTime()函数。下面是我尝试过的。
<query xmlns="http://marklogic.com/appservices/search">
<and-query>
<collection-query>
<uri>live</uri>
</collection-query>
<range-query type="xs:dateTime">
<element ns="" name="created-on"/>
<value>2019-06-10T10:36:14.002101Z</value>
<range-operator>GT</range-operator>
</range-query>
</and-query>
</query>
我希望这样-
<query xmlns="http://marklogic.com/appservices/search">
<and-query>
<collection-query>
<uri>live</uri>
</collection-query>
<range-query type="xs:dateTime">
<element ns="" name="created-on"/>
<value>{fn:current-dateTime() - xs:dayTimeDuration("PT3M")}</value>
<range-operator>GT</range-operator>
</range-query>
</and-query>
</query>
答案 0 :(得分:1)
您可以使用Expression Language在QueryMarklogic
处理器的 Query 属性中以所需的任何格式填充当前时间。
类似的东西:
<query xmlns="http://marklogic.com/appservices/search">
<and-query>
<collection-query>
<uri>live</uri>
</collection-query>
<range-query type="xs:dateTime">
<element ns="" name="created-on"/>
<value>${now():minus(180000):format('YYYY-MM-dd HH:mm:ss.SSS')}</value>
<range-operator>GT</range-operator>
</range-query>
</and-query>
</query>
该表达式通过now()
获取当前时间,通过minus()
减去3分钟(3分钟* 60秒/分钟* 1000毫秒/秒= 180000毫秒),然后以具体格式。您可以使用Java SimpleDateFormat
codes将输出更改为所需的输出。