【问题标题】:How we can get all MarkLogic databases document counts in single XQuery Code?我们如何在单个 XQuery 代码中获取所有 MarkLogic 数据库文档计数?
【发布时间】:2021-09-08 19:12:47
【问题描述】:

我们需要使用 XQuery 生成报告,其中需要详细信息,例如数据库大小和数据库文档计数(文档总数)。

我们有下面的 XQuery 代码,我们可以从中获取数据库名称和数据库大小,但我们还希望包含 AdminUI 中的数据库文档计数。

for $db-id in xdmp:databases()
let $db-name := xdmp:database-name($db-id)
let $db-size :=
  fn:sum(
    for $f-id in xdmp:database-forests($db-id)
    let $f-status := xdmp:forest-status($f-id)
    let $space := $f-status/forest:device-space
    let $f-name := $f-status/forest:forest-name
    let $f-size :=
      fn:sum(
        for $stand in $f-status/forest:stands/forest:stand
        let $stand-size := $stand/forest:disk-size/fn:data(.)
        return $space
      )
    return $f-size
  )
order by $db-size descending
return $db-name || " = " || $db-size

类似

return $db-name || " = " || $db-size || "=" || $db-count

使用下面,我们可以获取单个数据库中的文档计数(无论在 QC 下拉列表中选择什么),但我需要在单个脚本中为所有数据库运行以下命令。

xdmp:estimate(doc())

对此有任何帮助或建议吗?提前感谢您的帮助。

【问题讨论】:

    标签: marklogic marklogic-10


    【解决方案1】:

    您可以使用xdmp:forest-counts() 检索document-count 并将它们相加,就像您对大小所做的那样:

    declare namespace forest = "http://marklogic.com/xdmp/status/forest";
    for $db-id in xdmp:databases()
    let $db-name := xdmp:database-name($db-id)
    let $db-size :=
      fn:sum(
        for $f-id in xdmp:database-forests($db-id)
        let $f-status := xdmp:forest-status($f-id)
        let $space := $f-status/forest:device-space
        let $f-name := $f-status/forest:forest-name
        let $f-size :=
          fn:sum(
            for $stand in $f-status/forest:stands/forest:stand
            let $stand-size := $stand/forest:disk-size/fn:data(.)
            return $space
          )
        return $f-size
      )
    let $db-count := 
      fn:sum(
        for $forest-id in xdmp:database-forests($db-id)
        let $forest-counts := xdmp:forest-counts($forest-id)
        return $forest-counts/forest:document-count/fn:data(.)
      )
    order by $db-size descending
    return $db-name || " = " || $db-size || ", " || $db-count
    

    如果您确实想使用xdmp:estimate(doc()),那么您可以使用xdmp:invoke-function() 并在选项中指定要执行的内容database

    declare namespace forest = "http://marklogic.com/xdmp/status/forest";
    for $db-id in xdmp:databases()
    let $db-name := xdmp:database-name($db-id)
    let $db-size :=
      fn:sum(
        for $f-id in xdmp:database-forests($db-id)
        let $f-status := xdmp:forest-status($f-id)
        let $space := $f-status/forest:device-space
        let $f-name := $f-status/forest:forest-name
        let $f-size :=
          fn:sum(
            for $stand in $f-status/forest:stands/forest:stand
            let $stand-size := $stand/forest:disk-size/fn:data(.)
            return $space
          )
        return $f-size
      )
    let $db-count := 
      xdmp:invoke-function(
        function(){ xdmp:estimate(doc())}, 
        <options xmlns="xdmp:eval">
          <database>{$db-id}</database>
        </options>)
    order by $db-size descending
    return $db-name || " = " || $db-size || ", " || $db-count
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 2018-09-01
      • 1970-01-01
      • 2013-05-25
      • 1970-01-01
      相关资源
      最近更新 更多