繁体   English   中英

使用Marklogic Optic API格式化日期

[英]Date Formatting with Marklogic Optic API

我的问题是关于让MarkLogic查询控制台javascript API将一列字符串格式化为日期。

直接处理字符串可以按预期工作:

var d = new Date("3/12/2019");
xdmp.monthNameFromDate(xs.date(d))
>>> March

但是,使用光学API:

const op = require('/MarkLogic/optic');

const ind = op.fromView('schema', 'money');
//get non null dates, stored as strings, [MM-DD-YYYY]
const ind2 = ind.where(op.ne(op.col('completed date'), ""))
const testMonth = op.as('testDate', fn.formatDate(xs.date(op.col('completed date')), "[M01]-[D01]-[Y0001]"))

返回以下错误:

[javascript] XDMP-CAST: function bound ()() -- Invalid cast: {_expr:"¿\"completed date\"", _preplans:null, _schemaName:null, ...} cast as xs.date

我相信这与该主题上的其他问题有所不同,因为据我所知,这些问题并未涉及OPTIC API,而是通过仅对单个字符串进行操作来解决的。 如何在MarkLogic中将字符串转换为日期类型? 我需要使用一个光学“列”并将其类型转换为日期对象,以便可以在其上调用https://docs.marklogic.com/xdmp.monthNameFromDate和其他相关工具。

我觉得缺少一些将函数应用于行集和选择特定列的简单明了的东西。

我自然想要做的是将一个函数应用于结果行集的每个属性:

let formatted = resulting_rows.map(x=>Date(x['completed date'])

管他呢。 这基本上是我在客户端执行的操作,但是仅丢弃大量内置的javascript功能并在浏览器中完成所有操作,这是不正确的,尤其是当我需要根据这些视图进行数月或数月的分组时。

某些有关对对象进行操作的链接被破坏并没有帮助: https : //docs.marklogic.com/map.keys

op.as()调用基于执行查询时应用于每行的表达式定义动态列。

该表达式只能使用对Optic API提供的函数的调用。 特别是在调用xs.date()时执行,而处理每一行时则执行op.xs.date()。 类似地,fn.formatDate()立即执行,而op.fn.formatDate()在行处理期间执行。

要使用动态列,请将其作为op.select()的参数提供,类似于以下草图:

op.fromView('schema', 'money');
  .where(op.ne(op.col('completed date'), ""))
  .select([
     op.col('completed date'),
     op.as('testDate', op.fn.formatDate(
         xdmp.parseDateTime(
             op.col('completed date'),
             "[M01]/[D01]/[Y0001]"),
         "[M01]-[D01]-[Y0001]"))
     ])
  .result();

调用.result()将执行查询管道。

该映射是XQuery,等效于服务器端JavaScript中未使用的JavaScript文字。 Optic确实支持map()管道步骤,该步骤需要一个lambda,并在调用result()之前紧接在管道步骤中出现,如下所示:

http://docs.marklogic.com/AccessPlan.prototype.map

迟来的脚注:这种情况下,解析和格式化日期的另一种方法是使用op.fn.translate()通过将每个“ /”实例转换为“-”来转换列值。

希望能有所帮助,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM