MarkLogic staging中如何用cts查询按条件获取JSON文档字段的唯一值
JavaScript CTS查询取唯一值解决方案
推荐方案(原生支持去重,性能最优)
直接使用MarkLogic内置的cts.values方法,引擎层直接完成过滤、去重、排序逻辑,无需拉取全量文档到内存处理,完全匹配你需要的select distinct(name) from xxx where source='source1'效果:
const filterQuery = cts.jsonPropertyValueQuery("source", "source1"); // 取name属性的唯一值,自动去重 const distinctNames = cts.values( cts.jsonPropertyReference("name"), // 指定要取值的JSON字段 [], ["ascending"], // 排序规则,不需要可删除该参数 filterQuery // 过滤条件 ).toArray();
现有写法修复方案
你当前写法逻辑上Set应该可以完成去重,如果出现重复大概率是返回的name值不是纯字符串、存在首尾空格或者不可见字符导致匹配失效,修改如下即可:
const query = cts.jsonPropertyValueQuery("source", "source1"); const distinctNames = [...new Set ( cts.search(query) .toArray() .map(doc => String(doc.root.name).trim()) // 统一转字符串并去除首尾空格 .sort() )]
内容的提问来源于stack exchange,提问作者Ronald
相关产品推荐
相关产品推荐

