首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我们如何在单个XQuery代码中获得所有MarkLogic数据库文档计数?

我们如何在单个XQuery代码中获得所有MarkLogic数据库文档计数?
EN

Stack Overflow用户
提问于 2021-06-25 19:23:50
回答 1查看 46关注 0票数 1

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

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

代码语言:javascript
运行
复制
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

就像这样

代码语言:javascript
运行
复制
return $db-name || " = " || $db-size || "=" || $db-count

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

代码语言:javascript
运行
复制
xdmp:estimate(doc())

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-25 20:19:11

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

代码语言:javascript
运行
复制
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()并在选项中指定要执行的content database

代码语言:javascript
运行
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68130188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档