给定以下文档结构:
{
"name": [
{
"use": "official",
"family": "Chalmers",
"given": [
"Peter",
"James"
]
},
{
"use": "usual",
"given": [
"Jim"
]
},
{
"use": "maiden",
"family": "Windsor",
"given": [
"Peter",
"James"
]
}
]
}
查询:FOR client IN Patient FILTER client.name[*].use=='official' RETURN client.name[*].given
我有电信和名称数组。我想查询比较,如果名称[*]。使用=='官方'然后打印相应的给予数组。
预期结果:“给定”:[“彼得”,“詹姆斯”]
1条答案
按热度按时间ie3xauqp1#
client.name[*].use
是一个数组,因此您需要使用数组运算子。它可以是下列其中一项:'string' in doc.attribute
doc.attribute ANY == 'string'
doc.attribute ANY IN ['string']
要从'official'数组中只返回给定的名称,可以使用子查询:
或者,您可以使用内嵌运算式:
结果:
在您的原始帖子中,示例文档和查询不匹配,但假设使用以下结构:
...以下是一个可能的查询:
请注意,
client.telecom[*].value LIKE "..."
会导致电话号码数组被转换为字符串"[\"+1 (03) 5555 6473 82\",\"+1 (252) 5555 910 920 3\"]"
,LIKE操作将针对该字符串运行--这种方法可以工作,但并不理想。CONTAINS()
也比两边都有%
万用字符的LIKE
快。可能会有多个'official'元素,这可能需要额外的数组嵌套级别。上面的查询生成:
如果您知道只有一个元素或明确地将其限制为一个元素,则可以使用
FIRST()
或FLATTEN()
去掉其中一个方括号。