Marklogic中的非Null值-搜索JSON文档,其数组中的属性在Marklogic中不为空值

时间:2019-02-06 10:15:59

标签: javascript marklogic marklogic-8 marklogic-7

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

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

我想使用Javascript搜索Marklogic中所有包含非空ORDERNUMBER的JSON文档的URI

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

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

1 个答案:

答案 0 :(得分:3)

您通常有一些选择,但是空数组的情况尤其难以区分。这是因为它既不是空字符串值也不是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'), '>', '')

HTH!