marklogic - 使用不同的值

marklogic - use distinct-values

我尝试从文档中获取不同的值。但它总是 return 重复值。

for $uri in cts:uris((),
                     (),
                     cts:and-query(
                       cts:collection-query("/citation/company")
                 )
         )[1 to 1000]
return distinct-values( doc($uri)/PerformingOrganizations/Name)

result: 
   EARTH RESEARCH LLC
   EARTH RESEARCH LLC
   EARTH RESEARCH LLC
   EARTH RESEARCH LLC
   EARTH RESEARCH LLC

为什么 distinct-values returns 重复值?我怎样才能得到结果消除重复值。提前致谢。

您在迭代器范围内调用 distinct-values,因此每 $uri 调用一次。首先收集您的值序列,然后为所有值调用一次 distinct-values

let $values :=
  for $uri in cts:uris((), 'limit=1000',
    cts:and-query(cts:collection-query("/citation/company")))
  return doc($uri)/PerformingOrganizations/Name 
return distinct-values($values)

此外,cts:uris 是一个词典函数,它将 return 索引中的每个结果,除非特别受选项参数限制。限制使用谓词将导致词典调用 returning all 首先,序列将被限制为前 1000 个。使用选项来限制将导致在函数中只 returning 前 1000 个结果。对于具有很多值的索引,不使用这些选项会导致性能问题。

希望这篇 XQuery 对您有所帮助。试试这个。

let $uris := cts:uri-match(('*.xml'),(),cts:collection-query("/citation/company"))
let $name := for $uri in $uris
             return doc($uri)/PerformingOrganizations/Name/text()

return fn:distinct-values($name)