MarkLogic-如何用JavaScript有效过滤序列



我需要通过检查元素的存在来滤除用JavaScript过滤标记序列(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循环手动做到这一点,但是性能要差得多(更不用说漂亮了(

任何建议/s?

谢谢

a SequenceIterable的实例,如JavaScript参考指南中所述。因此,您可以像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!

您知道如何从Xquery完成此操作。您可以从JavaScript调用Xquery。如果有足够强大的理由(例如表现(,我建议您尝试您所知道的。JavaScript没有Xquery所做的序列的核心语言概念,因此在XQUERY中可以做什么,因为"核心"语言语句也不能总是在JavaScript(以及Visa Versa(中完成。对JavaScript的支持并不意味着在某些情况下,Xquery可能是更好的选择(或Visa Versa(。支持从JavaScript调用Xquery的支持确实暗示该用例被认为是合理的(反之亦然(。多语言不是一个挑剔。

最新更新