使用 optic API 从 MarkLogic 中的 TDE 视图获取数据范围内某些列数据的计数时出现错误

问题描述 投票:0回答:1

我是 MarkLogic 新手,需要问题调试方面的帮助。 我已经使用 MarkLogic TDE 创建了一个视图,并希望从该视图获取某个日期范围内的记录计数。

我已经检查了尝试光学API的选项。

尝试了这个 XQuery,它给了我一个错误,指出

BookingCreateDt
在视图中不可用,但它实际上存在于我的模板视图中。

您能抽出一些时间来检查一下问题吗?

查询:

xquery version "1.0-ml";
import module namespace op=http://marklogic.com/optic at "/MarkLogic/optic.xqy";
op:from-view("GTM2_Shipment", "Shipment_View", "")
=> op:select(("Ancillary_QuotePrice", "transMode"))
  =>op:where(
   
      op:and((
        op:eq(op:col('transMode'), 'Sea')
         ,
        op:gt(op:col('BookingCreateDt'), '2022-03-21T15:03:20')
      ))
      )
=>op:limit(1)
=>op:result()

它返回此错误-

[1.0-ml] SQL-NOCOLUMN:未找到列:BookingCreateDt

marklogic marklogic-optic-api
1个回答
1
投票

您的 op.select() 将其余结果限制为您提到的 2 列(“Ancillary_QuotePrice”、“transMode”)。

因此,您正在测试的列不存在。

尝试:

xquery version "1.0-ml";
import module namespace op=http://marklogic.com/optic at "/MarkLogic/optic.xqy";
op:from-view("GTM2_Shipment", "Shipment_View", "")
=>op:where(   
      op:and((
        op:eq(op:col('transMode'), 'Sea')
         ,
        op:gt(op:col('BookingCreateDt'), '2022-03-21T15:03:20')
      ))
      )
=> op:select(("Ancillary_QuotePrice", "transMode"))
=> op:limit(1)
=> op:result()

但是,您的代码仅按数据库顺序提供一个结果。结果与计数记录无关。也许这就是你想要的——但它与标题不符。如果您正在寻找计数:

xquery version "1.0-ml";
import module namespace op=http://marklogic.com/optic at "/MarkLogic/optic.xqy";
op:from-view("GTM2_Shipment", "Shipment_View", "")
=>op:where(   
      op:and((
        op:eq(op:col('transMode'), 'Sea')
         ,
        op:gt(op:col('BookingCreateDt'), '2022-03-21T15:03:20')
      ))
      )
=> op:group-by((), op:count(op:col("theCount"), op:col("transMode")))
=> op:result()

这将导致一条记录带有一个名为 theCount 的列,其中包含与 where 子句匹配的记录数。我使用了 transMode,因为我知道它存在于基于 where 子句的所有记录中。您可以使用任何列。

© www.soinside.com 2019 - 2024. All rights reserved.