Как реализовать запрос SQL в JavaScript MarkLogic? - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть запрос SQL, который я хочу реализовать в типе запроса Javascript в Mark Logic.Цель состоит в том, чтобы вернуть все URIs результата запроса.

Ниже приведен SQL-запрос, который я хочу преобразовать:

SELECT * FROM DOCUMENT_TABLE
WHERE WADCTO IN ('WM', 'WO')
AND (WASRST NOT IN ('02', 'M', 'M9')) AND (WASTRX = 0)

Здесьмой текущий запрос Javascript, который я тестировал в консоли запросов, но не возвращает то же количество строк, что и запрос SQL:

cts.uris(null, null, 
  cts.andQuery([
    cts.collectionQuery("JDEdwards"), 
    cts.collectionQuery("WorkOrder_Document"),
    cts.andQuery([
      cts.orQuery([
        cts.elementRangeQuery(fn.QName("http://www.example.com/ads/JDEdwards/document", "WADCTO"),"=","WO"),
        cts.elementRangeQuery(fn.QName("http://www.example.com/ads/JDEdwards/document", "WADCTO"),"=","WM")
      ]),
      cts.andQuery([
        cts.elementRangeQuery(fn.QName("http://www.example.com/ads/JDEdwards/document", "WASRST"),"!=","02"),
        cts.elementRangeQuery(fn.QName("http://www.example.com/ads/JDEdwards/document", "WASRST"),"!=","M"),
        cts.elementRangeQuery(fn.QName("http://www.example.com/ads/JDEdwards/document", "WASRST"),"!=","09")
      ]),
      cts.elementRangeQuery(fn.QName("http://www.example.com/ads/JDEdwards/document", "WASTRX"),"=","0")
    ])
  ])
);

Обратите внимание, что у меня есть индекс диапазона настройки для элементов WADCTO, WASRST и WASTRX.

Что-то отсутствует илине так с логикой моего кода?

1 Ответ

0 голосов
/ 24 сентября 2018

Запрос диапазона может указывать связанный с ИЛИ список значений.Кроме того, cts.notQuery() может отклонить запрос.Возможно, что-то похожее на следующий эскиз может быть ближе.

cts.uris(null, null, 
  cts.andQuery([
    cts.collectionQuery("JDEdwards"),
    cts.collectionQuery("WorkOrder_Document"),
    cts.elementRangeQuery(fn.QName("...", "WADCTO"),"=", ["WO", "WM"]),
    cts.notQuery(
      cts.elementRangeQuery(fn.QName("...", "WASRST"),"=", ["02", "M", "09"])
      ),
    cts.elementRangeQuery(fn.QName("...", "WASTRX"),"=", "0")
    ]);

В число проверяемых вещей входит

  • , находятся ли целевые документы в обеих коллекциях
  • , есть ли пространства именверны для элементов
  • независимо от того, имеют ли индексы диапазона строковый тип данных (WASTRX был числом в SQL-версии запроса)

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

Надеемся, что поможет,

...