marklogic - marklogic xquery 如何提交更新,然后可以通过以下行在同一个 xquery 函数中使用更新?
问题描述
我在 Windows 10 上使用 marklogic 10。
我有一个工作流程,我想记录每个步骤的信息。所以我想在数据库中有类似的东西,我更新数据,提交,然后我可以在下面的代码中立即使用这些数据。这是可行的吗?如何?
例如,在下面的示例代码中,假设我是第一次写日志,我想在我写日志之前创建文档。所以我创建了日志文档,提交,然后我在这个日志文档中插入了一个日志节点。但是似乎创建了日志文档,但是日志节点没有插入到日志文档中。我应该如何使它工作?这个想法是我想要一个可以将日志节点插入日志文件并且不受以下代码失败影响的功能
let $logFile := "/workflow/tracking/load-log.xml"
let $thisErrorMsg := <error>
<time>2020/04/10</time>
<desc>test</desc>
</error>
let $_log-file-exists := if(fn:empty(fn:doc($logFile)))
then
let $root := <errors></errors>
return
(
xdmp:set-transaction-mode("update")
,
xdmp:document-insert(
$logFile,
$root,
<options xmlns="xdmp:document-insert">
<permissions>{xdmp:default-permissions()}</permissions>
<quality>10</quality>
</options>)
,
xdmp:commit()
)
else ()
return
(
xdmp:set-transaction-mode("update")
,
xdmp:node-insert-child( fn:doc($logFile)/errors, $thisErrorMsg)
,
xdmp:commit()
)
非常感谢您的帮助海伦
解决方案
虽然有很多方法可以随心所欲,但我会避免这样做。您的代码将变得不必要地复杂。只需编写带有第一个错误的初始文档,或附加。
您还可以考虑将每个错误写成单独的文档。当你的日志文件开始变大时,它就不容易处理了。
!
推荐阅读
- google-colaboratory - 在服务上处理渲染是否可以接受?
- pandas - Pandas GroupBy drop_duplicates on specific group
- visual-studio - 如何将 CPLEX/Concert Tech 与 VS2019 和 Visual C++ 2015 链接?
- c++ - 如何抑制为 protobuf 消息字段发出显式访问器?
- java - Java:如何将取自用户的字符串与字符串数组进行比较?
- mongodb - 除了在 MongoDB 中使用角色的特定集合之外,如何对 DB 中的所有集合执行特定操作?
- tsql - 消除集合名称不同的表记录的冗余集合
- html - 你如何找到第二个嗨?
- python - 如何找到一定范围内的所有素数并打印出来?
- javascript - Firebase Cloud Firestore 规则/权限问题