Arangodb Arango DB筛选器查询打印值数组
鉴于以下文件结构:Arangodb Arango DB筛选器查询打印值数组,arangodb,aql,Arangodb,Aql,鉴于以下文件结构: { "name": [ { "use": "official", "family": "Chalmers", "given": [ "Peter", "James" ] }, { "use": "usual", "given&qu
{
"name": [
{
"use": "official",
"family": "Chalmers",
"given": [
"Peter",
"James"
]
},
{
"use": "usual",
"given": [
"Jim"
]
},
{
"use": "maiden",
"family": "Windsor",
"given": [
"Peter",
"James"
]
}
]
}
{
"telecom": [
{
"use": "official",
"value": "+1 (03) 5555 6473 82"
},
{
"use": "mobile",
"value": "+1 (252) 5555 910 920 3"
}
],
"name": [
{
"use": "official",
"family": "Chalmers",
"given": [
"Peter",
"James"
]
},
{
"use": "usual",
"given": [
"Jim"
]
},
{
"use": "maiden",
"family": "Windsor",
"given": [
"Peter",
"James"
]
}
]
}
查询:
用于患者筛选客户端中的客户端。名称[*]。使用=='official'返回客户端。名称[*]。给定
我有电信和名称阵列。
我想查询比较名称[]。使用=='official',然后打印相应的give数组
预期结果:
“给定”:[
“彼得”,
“詹姆斯”
]
客户端。名称[*]。use
是一个数组,因此需要使用数组运算符。它可以是以下任一项:
文档属性中的“字符串”
doc.attribute ANY=='string'
doc.attribute['string']中的任意属性
RETURN { given:
FIRST(FOR name IN client.name FILTER name.use == 'official' LIMIT 1 RETURN name.given)
}
或者,您可以使用:
结果:
[
{
"given": [
"Peter",
"James"
]
}
]
在您的原始帖子中,示例文档和查询不匹配,但假设以下结构:
{
"name": [
{
"use": "official",
"family": "Chalmers",
"given": [
"Peter",
"James"
]
},
{
"use": "usual",
"given": [
"Jim"
]
},
{
"use": "maiden",
"family": "Windsor",
"given": [
"Peter",
"James"
]
}
]
}
{
"telecom": [
{
"use": "official",
"value": "+1 (03) 5555 6473 82"
},
{
"use": "mobile",
"value": "+1 (252) 5555 910 920 3"
}
],
"name": [
{
"use": "official",
"family": "Chalmers",
"given": [
"Peter",
"James"
]
},
{
"use": "usual",
"given": [
"Jim"
]
},
{
"use": "maiden",
"family": "Windsor",
"given": [
"Peter",
"James"
]
}
]
}
…以下是一个可能的查询:
FOR client IN Patient
FILTER LENGTH(client.telecom[* FILTER
CONTAINS(CURRENT.value, "(03) 5555 6473") AND
CURRENT.use == 'official']
)
RETURN {
given: client.name[* FILTER CURRENT.use == 'official' RETURN CURRENT.given]
}
请注意,“…”之类的client.telecom[*].value会将电话号码数组转换为一个字符串“[\”+1(03)5555 6473 82\”,“\”+1(252)5555 910 920 3\””
,对其运行类似的操作-这类操作有效,但并不理想
CONTAINS()
也比两边都有%
通配符的快
可能存在多个“官方”元素,这可能需要额外级别的数组嵌套。上述查询生成:
[
{
"given": [
[
"Peter",
"James"
]
]
}
]
如果您知道只有一个元素,或者明确地将其限制为一个元素,那么您可以使用FIRST()
或FLATTEN()
取消其中一个包装方括号,谢谢您的帮助。它工作正常。