鉴于以下文档结构,我需要编写一个查询来查找例如500美元以上的所有帐户。
{
"account": 1,
"assets": [
{
"currency": "USD",
"amount": 600
},
{
"currency": "CAD",
"amount": 1000
},
{
"currency": "EUR",
"amount": 200
}
]
}
使用Xpath谓词,就像:
fn:collection()[//(currency='USD' and amount>500)]
但是,我无法利用范围索引为相同目的创建cts查询。天真的我可以为每种货币类型创建一个单独的路径范围索引,但这似乎太多了。
有什么建议吗?谢谢!
答案 0 :(得分:3)
cts.search(cts.jsonPropertyScopeQuery('assets',
cts.andQuery([cts.jsonPropertyValueQuery('currency', 'USD'),
cts.jsonPropertyRangeQuery('amount', '>', 599.99)
])
))
答案 1 :(得分:1)
Fiona的解决方案在通过运行过滤搜索或索引位置来消除误报时有效。
另一种选择是以不同的方式对数据建模:
{
"account": 1,
"assetsByCurrency": {
"USD": {"amount": 600},
"CAD": {"amount": 1000},
"EUR": {"amount": 200}
}
}
使用该模型,应该可以消除误报而无需过滤或定位:
cts.search(cts.jsonPropertyScopeQuery('assetsByCurrency',
cts.jsonPropertyScopeQuery('USD',
cts.jsonPropertyRangeQuery('amount', '>', 599.99)
))
))
另一种可能性是使用TDE索引资产对象并使用Optic API检索数据,该API允许在任何列上进行比较过滤器并消除误报。
希望有帮助,