如何根据动态选择的类型对文档执行排序,然后按金额排序

时间:2019-03-13 16:42:37

标签: sorting marklogic

要求:

  1. 搜索结果返回采购订单列表
  2. 购买订单可能有或没有订单项(出于示例目的)
  3. 一个采购订单可能有数千个订单项
  4. 一种类型只有一个行项目(采购订单中没有重复项)
  5. 用于排序:
    1. 我们将知道选择哪种类型进行排序,并且只希望基于该特定类型的数量进行排序
    2. 将仅选择一种类型进行排序
    3. 其他用例可以排序不同的元素

示例文档:

<purchase-order>
  <line-items>
    <line-item type=lamp  amount=3500 </line-item>
    <line-item type=couch  amount=50000 </line-item>
    <line-item type=chair  amount=40000 </line-item>
  </line-items>
  <other-stuff></other-stuff>
</purchase-order>

1 个答案:

答案 0 :(得分:0)

首先,您的xml格式不正确: 我已经在XML和查询下面使用了

     let $input :=
          <purchase-order>
           <line-items>
            <line-item type="lamp"  amount="52"/>
            <line-item type="lamp"  amount="40000"/>
            <line-item type="lamp"  amount="3500"/>
            <line-item type="lamp"  amount="3500"/>
            <line-item type="couch"  amount="50000"/>
            <line-item type="chair"  amount="110000"/>
            <line-item type="chair"  amount="5000"/>
            <line-item type="chair"  amount="80000"/>
          </line-items>
          <other-stuff></other-stuff>
        </purchase-order>

         let $purchase-order := 
          for $each-type in distinct-values($input/line-items/line-item/@type)
          let $seq := $input/line-items/line-item[@type = $each-type]
          order by $each-type
          return 
             <line-items type="{$each-type}">
             {
             for $one in $seq
             order by xs:integer($one/@amount)
             return $one
             }
             </line-items>
             return <purchase-order>{$purchase-order}</purchase-order>

通过查询生成的输出:

              <purchase-order>
                <line-items type="chair">
                <line-item amount="5000" type="chair"/>
                <line-item amount="80000" type="chair"/>
                <line-item amount="110000" type="chair"/>
                </line-items>
                <line-items type="couch">
                <line-item amount="50000" type="couch"/>
                </line-items>
                <line-items type="lamp">
                <line-item amount="52" type="lamp"/>
                <line-item amount="3500" type="lamp"/>
                <line-item amount="3500" type="lamp"/>
                <line-item amount="40000" type="lamp"/>
                </line-items>
              </purchase-order>

希望您的需求将完全填写此查询。