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

MarkLogic - query for documents where a specific json property is not defined

我正在使用 ML8。我在数据库中有一堆 json 文档。有些文档有一定的 属性 "summaryData",比如:

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

然而,并非所有文档都有此 属性。我想构建一个 SJS 查询来检索那些没有定义 属性 的文档。如果它是 SQL,我想等同于 "WHERE summaryData IS NULL"

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

您可以使用cts.jsonPropertyScopeQuery() and the second parameter set to cts.trueQuery()

在文档中找到JSON属性的存在

要找到相反的结果,您可以将查询的那部分包装在 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() 文档中有所解释。

最后:有人可能会争辩说这是 的重复 我本来打算将其标记为重复,但没有这样做,因为您询问了 SJS,一个 属性 并否定了搜索。其他人可能有不同意见并将其标记为重复。