MarkLogic - 查询未定义特定json属性的文档

时间:2017-09-17 12:17:12

标签: javascript json marklogic sjs

我正在使用ML8。我在数据库中有一堆json文档。有些文件具有某种属性" summaryData",类似于:

{
...(other stuff)...
  summaryData: {
    count: 100,
    total: 10000,
    summaryDate: (date value)
  }
}

但是,并非所有文档都具有此属性。我想构建一个SJS查询来检索那些没有定义此属性的文档。如果它是SQL,我猜相应的东西就像" WHERE summaryData IS NULL"

我不确定要在文档中搜索什么。任何建议都会有所帮助。

1 个答案:

答案 0 :(得分:5)

您可以使用cts.jsonPropertyScopeQuery()找到文档中存在的JSON属性,并将第二个参数设置为cts.trueQuery()

要找到相反的结果,您可以将查询的那部分包装在cts.notQuery()

示例:

cts.search(
  cts.notQuery(
    cts.jsonPropertyScopeQuery('summaryData', cts.trueQuery())
  )
)

为了清晰起见,更大的查询内部的示例(或更多的混淆..谁知道..:)

cts.search(
  cts.andQuery([
     cts.directoryQuery('/some/scoping/path/'), 
     cts.notQuery(
        cts.jsonPropertyScopeQuery('myMissingElement', cts.trueQuery())
     )
 ])
)

cts.elementQuery()文档对此进行了解释。

最后:有人可能会说这是Need XQuery syntax for 'if Exists()' behaviour in search api的副本我打算将其标记为副本,但不是因为你询问了SJS,属性并否定了搜索。其他人的意见可能不同,并将其标记为重复。