我已经为一个字段定义了一个路径范围索引,并且该字段值可能为null。存储在Marklogic中的对象类似于:
{“ the”:{“ path”:{“ to”:{“ field”:null}}}}
我已经尝试过查询
cts:path-range-query(“ / the / path / to / field”,“ =”,json:null())
,并且不返回任何结果。如果我改为为该字段为null时定义一个新值,并为此情况创建一个索引,则搜索返回结果。
新文档:
{“ the”:{“ path”:{“ to”:{“ field”:null,“ fieldIsNull”:true}}}}
新查询:
cts:path-range-query(“ / the / path / to / fieldIsNull”,“ =”,“ true”)
如何在不使用新索引的情况下使用路径范围索引搜索空值?
我正在使用Marklogic 9.0-4。
答案 0 :(得分:0)
您可以在服务器端JavaScript中使用以下内容:
cts.jsonPropertyValueQuery("field", null)
在XQuery中这样写:
cts:json-property-value-query("Output", null-node {})
您是否尝试在路径范围查询中将json:null()
替换为null-node{}
?
HTH!
答案 1 :(得分:0)
在我看来,这就是 MarkLogic 真正将 JSON 结合在一起的地方。 XQuery 和 XML 没有 NULL 值,实际上,在使用 XML 和 XQuery 时,空值是一个大问题,人们可以幸福地摆脱它。但是现在您不仅拥有实际的空值,而且拥有 NullNode 类型。这给了你这种异常行为:
let b=null
b ? 'true' : 'false' // returns false
let a=new NullNode()
a ? 'true' : 'false' // returns true
这使得处理包含 'null' 的数据变得更加复杂,好像这并不是一个完全麻烦的开始!