需要在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",""))
])
);
答案 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!