![](/img/trans.png)
[英]In MarkLogic, how do I search in JSON documents using only the key?
[英]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"
}
}
我希望查询从所有文档中获取e
下c1
所有值,并将它们放在数组中以进行进一步处理。
如果路径已知,请考虑根据您的目标在特定路径上定义路径范围索引,并使用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 position
和element word position
索引。
上述范围查询与e/c1
上的路径索引之间的一个重要区别是,使用路径索引, c1
必须是e
的子代,而范围查询仅检查后代。 范围查询本质上等效于路径e//c1
。
HTH!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.