MarkLogic-如何使用javascript有效过滤序列

时间:2019-05-14 04:19:48

标签: javascript filtering sequence marklogic

我需要通过检查元素的存在来使用JavaScript过滤MarkLogic序列(在cts查询之后)。如果该元素存在,则显示值。 我知道XQuery可以通过执行类似的操作来实现

fn:filter(function($a) { fn:not(fn:empty($a/es:envelope/es:instance/MyEntity/MyField)) }, $miseq)/es:envelope/es:instance/MyEntity/MyField

我没有看到等效的Javascript。我知道我可以通过for循环手动完成此操作,但是性能明显较差(更不用说不太漂亮了)

有没有建议?

谢谢

2 个答案:

答案 0 :(得分:1)

SequenceIterable的实例,如JavaScript reference guide中所述。因此,您可以像JavaScript中的其他可迭代对象一样对其进行迭代。像这样:

var result = [];

for (const a of miseq) {
   var myField = a.xpath('/es:envelope/es:instance/MyEntity/MyField');

   if (fn.exists(myField)) {
     result = result.concat(myField.toArray()); // you may be pulling more than one element
   }
}

HTH!

答案 1 :(得分:0)

您知道如何通过XQuery执行此操作。您可以从javascript调用xquery。如果有足够的充分理由(例如性能),我建议您尝试一下。 Javascript没有XQuery所具有的序列的核心语言概念,因此在XQuery中可以做为“核心”语言语句的操作也不能总是在JavaScript中完成(反之亦然)。对JavaScript的支持并不意味着在某些情况下XQuery可能是更好的选择(反之亦然)。从JavaScript调用XQuery的支持确实表明该用例被认为是合理的(反之亦然)。 多语言不是专有名词。