MarkLogic-基于JSON路径进行过滤的CTS查询

时间:2019-01-10 21:10:18

标签: marklogic marklogic-9 marklogic-dhf

我在一个集合中有两个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,并且仅当PolicyInfo下Policy的PolicystatusCd为“ Primary”时才需要返回文档。因此,我应该仅返回Doc1,而不返回Doc2,因为Doc2在ClaimInfo中将策略P1-111作为主要策略,而在PolicyInfo中则没有

我正在尝试使用cts.serch(最好不创建除默认通用索引以外的其他索引),但是找不到合适的解决方案。

或者,我可以使用类似cts.propertyValueQuery的方法返回两个文档,并使用JavaScipt过滤掉Doc2,但是请检查我是否可以使用MarkLogic函数本身完成所有操作。

提前谢谢!

1 个答案:

答案 0 :(得分:1)

您可以为此使用cts.jsonPropertyScopeQuery。您可以将查询写成这样:

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

HTH!