MarkLogic - 基于 json 路径过滤的 CTS 查询

MarkLogic - CTS query to filter based on json path

我在一个集合中有两个 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 下的 PolicystatusCd 为 'Primary' 时才需要 return 文档。所以,我应该 return 只有 Doc1 而不是 Doc2,因为 Doc2 的政策 P1-111 在 ClaimInfo 中是主要的,但不是 PolicyInfo

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

或者,我可以使用 cts.propertyValueQuery 之类的东西来 return 两个文档并使用 JavaScipt 过滤掉 Doc2,但检查我是否可以用 MarkLogic 函数本身完成所有这些。

提前致谢!

您可以使用 cts.jsonPropertyScopeQuery 来达到这个目的。你会这样写你的查询:

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

HTH!