MarkLogic - запрос документов, где определенное свойство json не определено

Я использую ML8. У меня есть куча документов JSON в базе данных. Некоторые документы имеют определенное свойство "summaryData", что-то вроде:

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

Однако не все документы имеют это свойство. Я хотел бы создать запрос SJS для извлечения документов, для которых это свойство не определено. Если бы это был SQL, я думаю, что эквивалент будет что-то вроде "WHERE summaryData IS NULL"

Я не был уверен, что искать в документах. Любой совет будет полезен.

1 ответ

Решение

Вы можете найти существование свойства JSON в документе с помощью https://docs.marklogic.com/jsonPropertyScopeQuery и второго параметра, установленного в 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 для поведения if ifists() в поисковом API. Я собирался пометить его как дубликат, но не потому, что вы спрашивали о свойстве SJS и отрицали поиск. Кто-то может отличаться во мнении и пометить его как дубликат.

Другие вопросы по тегам