我有一个json文件,它的属性有字符串值,有些属性有整数值。我有一个通用查询,它使用cts:word-query查询给定的json属性值。这在json属性具有字符串值时有效,但对于数值,它不起作用..例如:
以下是我的json字符串
{
"id": "35A7D24661CFB8A7E050480A751E4949",
"moniker": "CL-1460933",
"entityType": "Cell Line",
"entitySubType": "Immortalized",
"bioSafetyLevel": "BL2",
"name": "WSU-NHL",
"growthFS": {
"id": "35A7D24661D1B8A7E050480A751E4949",
"mediumUsed": "IMDM + 10% HS",
"percentCO2": 5,
"percentHumudity": 95,
"percentSerum": 10,
"spinnerPlateSpeed": -1,
"temp": -1,
"growthConditions": "Suspension"
},
}
当我执行以下操作时
cts:search(fn:doc(),
cts:json-property-scope-query("growthFS", cts:json-property-scope-query("percentHumudity",
cts:word-query("95", ("wildcarded"), 1))))[1]
我没有得到json,但是当我做以下
时cts:search(fn:doc(),
cts:json-property-scope-query("growthFS", cts:json-property-value-query("percentHumudity", 95, "wildcarded")))[1]
我收到了文档,我认为cts:word-query
适用于任何xs:atomicType
。如果不是这样,我怎么能写一个通用的cts:query而不考虑字符串的原子类型(字符串或数字)。
答案 0 :(得分:1)
在XML中,一切都是字符数据,而且 - 没有XML Schema - 是不可区分的类型。因此,MarkLogic将所谓的通用索引中的所有XML值都包含为字符串值,因为它在索引时没有模式知识。在JSON布尔值中,数值具有显式类型,即使没有模式,也可以这样索引。 MarkLogic也做了相应的事情。
因此,您需要使用值查询来匹配JSON数字。您应该能够对单词和值查询执行OR查询以获得相同的值:
cts:search(
fn:collection(),
cts:json-property-scope-query("growthFS",
cts:or-query((
cts:json-property-word-query("percentHumudity", "95", "wildcarded"),
cts:json-property-value-query("percentHumudity", 95, "wildcarded")
))
)
)[1]
HTH!