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

MarkLogic - How to effectively filter a sequence with javascript

我需要通过检查元素是否存在来使用 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 循环手动实现这一点,但性能明显更差(更不用说不那么漂亮了)

任何suggestion/s?

谢谢

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

A​​ 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!