我是 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
您的 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 子句的所有记录中。您可以使用任何列。