繁体   English   中英

如何在MarkLogic JSON中搜索文件中特定路径处的键值?

[英]How to search in MarkLogic JSON for a key's value at a particular path in the file?

我的数据库中有一些特定格式的JSON文档。 在文档的两个位置都有一个密钥。 我想编写一个搜索查询,在其中我只能在第二次出现时搜索值。 要获得更清晰的图片,请参考下面创建的示例。

我尝试了cts.jsonPropertyScopeQuery("c1",cts.trueQuery())但未指定路径。 我还尝试了cts.jsonPropertyScopeQuery("c1", "e/c1")

 {
    "a": "aa",
    "b": "bb",
    "c": {
        "c1": "cc",
        "c2": "ccc"
    },
    "d": "dd",
    "e": {
        "c1": "xx"
    }
}

我希望查询从所有文档中获取ec1所有值,并将它们放在数组中以进行进一步处理。

如果路径已知,请考虑根据您的目标在特定路径上定义路径范围索引,并使用cts.pathRangeQuery或cts.values。

例如,在/ e / c1上定义一个路径范围索引(如果需要是相对的,则定义e / c1),然后对该索引使用cts.values来获取所有值:

cts.values(cts.pathReference("e/c1"))

同样,如果要搜索包含特定值而不是所有值列表的文档,则可以使用cts.pathRangeQuery:

cts.search(cts.pathRangeQuery("e/c1","=","xx"))

更多详细信息: 了解路径范围索引

由于要检索值列表,因此要设置索引。 如果要使用所有c1值,则可以使用范围索引,但是由于只需要其中一些值,因此需要一个路径范围索引。 完成设置后,可以使用cts.values

更多详细信息: 将范围索引用于值词法

我同意Dave的cts.values ,如果您cts.values寻找值,请使用cts.values而不是cts.search

Kim建议的路径范围查询对于精确搜索很有用,但是范围查询也应该工作,并且具有不需要预定义范围索引的优点。 使用方法如下:

cts.jsonPropertyScopeQuery("e",
  cts.jsonPropertyScopeQuery("c1",
    cts.trueQuery()))

cts.jsonPropertyScopeQuery上的文档Usage Notes中所述,范围查询确实需要启用位置。 建议启用这两个word positionelement word position索引。

上述范围查询与e/c1上的路径索引之间的一个重要区别是,使用路径索引, c1必须是e的子代,而范围查询仅检查后代。 范围查询本质上等效于路径e//c1

HTH!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM