1

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

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

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

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

4

1 回答 1

5

您可以通过使用cts.jsonPropertyScopeQuery()并将第二个参数设置为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()文档中有所解释。

最后:有人可能会争辩说,这是搜索 api 中“if Exists()”行为的需要 XQuery 语法的重复, 我打算将其标记为重复,但没有这样做,因为您询问了 SJS,一个属性并否定搜索。其他人可能意见不同,并将其标记为重复。

于 2017-09-17T15:16:32.487 回答