代码之家  ›  专栏  ›  技术社区  ›  thichxai

marklogic-使用不同的值

  •  1
  • thichxai  · 技术社区  · 6 年前

    我试图从文档中获取不同的值。但它总是返回重复的值。

    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返回重复的值?如何获得结果消除重复值。提前谢谢。

    2 回复  |  直到 6 年前
        1
  •  3
  •   wst    6 年前

    您正在呼叫 distinct-values 在迭代器的范围内,因此每次调用一次 $uri 。首先收集您的值序列,然后调用 不同的值 对所有人来说都是一次。

    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 是一个lexicon函数,它将返回索引中的所有结果,除非受到options参数的特别限制。限制使用谓词将导致词典调用返回 全部的 首先对其结果进行排序,然后将顺序限制为前1000个。相反,使用选项限制将导致函数仅返回前1000个结果。对于具有多个值的索引,不使用这些选项可能会导致性能问题。

        2
  •  0
  •   Dave Cassel    6 年前

    希望这个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)