首页 > 解决方案 > Marklogic 中的非 Null 值 - 在 Marklogic 中搜索具有非空值的数组属性的 JSON 文档

问题描述

需要在 Marklogic 中搜索的 JSON 文档的结构

{  
   "MESSAGEID":"18878285",
   "ORDERNUMBER":["2295796"],
   "CATEGORY":"F3702200000"
}

ORDERNUMBER我想使用 Javascript搜索 Marklogic 中所有 JSON 文档的 URI,这些文档由 not null 组成

我正在使用以下查询,但它仍然显示包含以下内容的文档的 URI"ORDERNUMBER":[]

cts.uris("",null,cts.andQuery
    ([
        cts.jsonPropertyValueQuery("ORDERNUMBER", "*", "wildcarded"),
        cts.notQuery(cts.jsonPropertyValueQuery("ORDERNUMBER",""))
    ])
);

标签: javascriptmarklogicmarklogic-8marklogic-7

解决方案


您通常有几个选项,但空数组的情况特别难以区分。这是因为它既不是空字符串值,也不是 null,但该属性确实存在。

cts.jsonPropertyScopeQuery("ORDERNUMBER", cts.trueQuery())将匹配具有该属性的任何文档。

cts.jsonPropertyValueQuery("ORDERNUMBER", "")匹配ORDERNUMBER: ""ORDERNUMBER: [""].

cts.jsonPropertyValueQuery("ORDERNUMBER", null)匹配ORDERNUMBER: null

cts.jsonPropertyValueQuery("ORDERNUMBER", "?*", "wildcarded")匹配ORDERNUMBER: null(不知道为什么)、ORDERNUMBER: "xx"ORDERNUMBER: ["xx"],但前提是您启用过滤(需要cts.search),或者您能够找到适当的通配符设置。

老实说,我认为最简单的解决方案是在 上放置一个范围索引ORDERNUMBER,然后使用 rangeQuery:

cts.rangeQuery(cts.pathReference('ORDERNUMBER'), '>', '')


推荐阅读