MarkLogic - запрос CTS для фильтрации на основе пути JSON - PullRequest
0 голосов
/ 11 января 2019

У меня есть два документа JSON в коллекции, как показано ниже

Doc 1
-----
"instance": {
    "PolicyInfo": [
       {
         "PolicyNumber": "P1-111", 
         "PolicyStatusCd": "Primary"
       }, 
       {
         "PolicyNumber": "P2-222", 
         "PolicyStatusCd": "Additional"
       }
    ],
    "ClaimInfo" : [
       {
         "PolicyNumber": "P3-333", 
         "PolicyStatusCd": "Additional"
       } 
    ]
  }

Doc 2
-----
"instance": {
    "PolicyInfo": [
       {
         "PolicyNumber": "P2-222", 
         "PolicyStatusCd": "Primary"
       }
    ],
    "ClaimInfo" : [
       {
         "PolicyNumber": "P1-111", 
         "PolicyStatusCd": "Primary"
       } 
    ]
  }

У меня есть номер политики ввода как P1-111, и мне нужно возвращать документ только в том случае, если для PolicystatusCd в разделе PolicyInfo для политики установлено значение «Primary». Итак, я должен вернуть только Doc1, но не Doc2, потому что Doc2 имеет политику P1-111 в качестве первичной в ClaimInfo, но не PolicyInfo

Я пытаюсь использовать cts.serch (желательно без создания дополнительных индексов, отличных от универсальных индексов по умолчанию), но не смог найти подходящего решения.

В качестве альтернативы, я мог бы использовать что-то вроде cts.propertyValueQuery для возврата обоих документов и использовать JavaScipt для фильтрации Doc2, но проверяя, могу ли я сделать все это с помощью самих функций MarkLogic.

Заранее спасибо!

1 Ответ

0 голосов
/ 11 января 2019

Вы можете использовать cts.jsonPropertyScopeQuery для этой цели. Вы бы написали свой запрос примерно так:

cts.jsonPropertyScopeQuery('PolicyInfo',
  cts.jsonPropertyValueQuery('PolicyNumber', 'P1-111')
)

НТН!

...