return 最近 30 天 dateCreated 的不同用户总数

How return total distinct user in last 30 days dateCreated

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

<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)

但是如何在 cts:values 中使用条件 dateCreated>30cts:range-query。 还有其他方法可以实现这一目标吗?

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

您可以将约束范围查询作为第三个参数传递给 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