如何使用路径范围索引搜索空值?

时间:2018-08-30 11:52:31

标签: marklogic marklogic-9

我已经为一个字段定义了一个路径范围索引,并且该字段值可能为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。

2 个答案:

答案 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' 的数据变得更加复杂,好像这并不是一个完全麻烦的开始!