Ненулевые значения в Marklogic - Поиск документов JSON с атрибутами в массиве с ненулевыми значениями в Marklogic - PullRequest
0 голосов
/ 06 февраля 2019

Структура документов JSON, которые необходимо искать в Marklogic

{  
   "MESSAGEID":"18878285",
   "ORDERNUMBER":["2295796"],
   "CATEGORY":"F3702200000"
}

Я хотел найти URI всех документов JSON в Marklogic, которые содержат не нуль ORDERNUMBER, с использованием Javascript

Я использую следующий запрос, но он все еще показывает URI для документов, включающих "ORDERNUMBER":[]

cts.uris("",null,cts.andQuery
    ([
        cts.jsonPropertyValueQuery("ORDERNUMBER", "*", "wildcarded"),
        cts.notQuery(cts.jsonPropertyValueQuery("ORDERNUMBER",""))
    ])
);

1 Ответ

0 голосов
/ 06 февраля 2019

Обычно у вас есть несколько вариантов, но регистр пустого массива особенно трудно различить.Это связано с тем, что оно не является ни пустым строковым значением, ни нулевым, но свойство действительно присутствует.

cts.jsonPropertyScopeQuery("ORDERNUMBER", cts.trueQuery()) будет соответствовать любому документу с таким свойством.

cts.jsonPropertyValueQuery("ORDERNUMBER", "") соответствуетORDERNUMBER: "" и ORDERNUMBER: [""].

cts.jsonPropertyValueQuery("ORDERNUMBER", null) соответствует ORDERNUMBER: null.

cts.jsonPropertyValueQuery("ORDERNUMBER", "?*", "wildcarded") соответствует ORDERNUMBER: null (не знаю почему), ORDERNUMBER: "xx" и ORDERNUMBER: ["xx"],но только если вы включаете фильтрацию (для которой требуется cts.search) или если вы можете найти соответствующие параметры подстановочного знака.

Если честно, самое простое решение, на мой взгляд, это просто поставить индекс диапазона наORDERNUMBER и используйте диапазон запросов:

cts.rangeQuery(cts.pathReference('ORDERNUMBER'), '>', '')

HTH!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...