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 и отрицали поиск. Кто-то может отличаться во мнении и пометить его как дубликат.