如何在过去30天内返回总不同用户dateCreated

时间:2017-04-10 15:25:11

标签: xquery marklogic marklogic-8

我的数据库中有很多审计文档,如下所示

<Record>
  <objectType>Audit</objectType>
  <dateCreated>2017-04-07T03:51:56.231-04:00</dateCreated>
  <createdBy>first user</createdBy>
</Record>

如何获取过去30天内创建审核文件的用户(createdBy)总数?有一些审计文件,其中createdBy相同,因此我们需要不同的值计数。

我尝试了以下查询:

let $query := cts:values(cts:element-reference(fn:QName($NS, "createdBy")))
return fn:count($query)

但我如何在dateCreated>30内使用条件cts:range-querycts:values。 有没有其他方法来实现这一目标?

(我已经为createdBy和dateCreated设置了元素范围索引)

1 个答案:

答案 0 :(得分:2)

您可以将约束范围查询作为第三个参数传递给cts:count-aggregate() - 以下几行应该有效:

let $index := fn:QName($NS, "dateCreated")
let $count := cts:count-aggregate(
    cts:element-reference($index),
    (),
    cts:element-range-query($index, ">",
        fn:current-dateTime() - xs:dayTimeDuration("P30D")
        )
    )

这应该为您提供过去30天内dateCreated值的总数。

有关详细信息,请参阅:

http://docs.marklogic.com/cts:count-aggregate