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

Roy*_*ang 1 javascript json marklogic sjs

我正在使用ML8。我在数据库中有一堆json文档。一些文档具有某些属性“ summaryData”,例如:

{
...(other stuff)...
  summaryData: {
    count: 100,
    total: 10000,
    summaryDate: (date value)
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,并非所有文档都具有此属性。我想构造一个SJS查询来检索那些未定义此属性的文档。如果是SQL,我想等效的内容应该是“ WHERE summaryData IS NULL”

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

Dav*_*nis 5

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

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

例:

cts.search(
  cts.notQuery(
    cts.jsonPropertyScopeQuery('summaryData', cts.trueQuery())
  )
)
Run Code Online (Sandbox Code Playgroud)

为了清楚起见,在更大的查询中添加了示例(或更混乱。..

cts.search(
  cts.andQuery([
     cts.directoryQuery('/some/scoping/path/'), 
     cts.notQuery(
        cts.jsonPropertyScopeQuery('myMissingElement', cts.trueQuery())
     )
 ])
)
Run Code Online (Sandbox Code Playgroud)

cts.elementQuery()文档对此做了一些解释。

最后:有人可能会说这与Need api需求XQuery语法重复, 我想将其标记为重复,但这并不是因为您询问了SJS,属性并否定了搜索。其他人的观点可能会有所不同,并将其标记为重复。