Как искать нулевое значение, используя индекс диапазона пути?
Я определил индекс диапазона пути для поля, и может случиться, что значение поля будет нулевым. Объект, хранящийся в Marklogic, похож на:
{"the": {"path": {"to": {"field": null}}}}
Я пробовал запрос
cts:path-range-query("/the/path/to/field", "=", json:null())
и это не возвращает никакого результата. Если вместо этого я определяю новое значение, когда поле имеет значение NULL, и создаю индекс только для этого случая, результаты поиска возвращаются.
Новый документ:
{"the": {"path": {"to": {"field": null, "fieldIsNull": true}}}}
Новый запрос:
cts: path-range-query ("/ the / path / to / fieldIsNull", "=", "true")
Как я могу искать нулевые значения, используя индекс диапазона пути, не прибегая к новому индексу?
Я использую Marklogic 9.0-4.
2 ответа
Вы можете использовать что-то вроде этого в JavaScript на стороне сервера:
cts.jsonPropertyValueQuery("field", null)
Который написан так в XQuery:
cts:json-property-value-query("Output", null-node {})
Вы пытались заменить json:null()
с null-node{}
в вашем запросе диапазона пути?
НТН!
На мой взгляд, именно здесь MarkLogic действительно провалил внедрение JSON. XQuery и XML не имеют значений NULL, и на самом деле значения NULL представляют собой огромную проблему, от которой можно полностью избавиться при использовании XML и XQuery. Но теперь у вас есть не только фактические значения NULL, но и тип NullNode. Это дает вам такое аномальное поведение:
let b=null
b ? 'true' : 'false' // returns false
let a=new NullNode()
a ? 'true' : 'false' // returns true
Это значительно усложняет работу с данными, содержащими «null», как если бы это не было проблемой с самого начала!