我想在ArangonDB中的特定集合的特定字段中通过文本进行简单搜索 . 像这样(在SQL中):
SELECT * FROM procedures WHERE procedures.name LIKE '%hemogram%'
我需要搜索对象(文档?)的字符串字段,该字段是数组的一部分,该数组是我的执行文档的字段:
[
{
"name": "Unimed",
"procedures": [
{
"type": "Exames",
"name": "Endoscopia"
},
{
"type": "Exame",
"name": "Hemograma"
}
]
}
]
例如,我想检索所有名为“字符串”的程序,在我的诊所集合的所有文档中搜索 .
我一直在阅读全文索引,但我无法理解如何创建或如何使用它们 .
任何帮助都会很棒!
EDIT
我几乎得到了我想要的东西 . 我的问题现在只返回我想要的信息 .
FOR clinic IN clinics
FILTER LIKE(clinic.procedures[*].name, '%hemogram%', true)
RETURN{
clinic_name: clinic.name,
procedure: clinic.procedures
}
这将返回给定诊所中的所有程序(程序是诊所内的一个数组),而不仅仅是字段名称是“LIKE”我的搜索字符串的程序 . 我怎样才能做到这一点?
2 回答
ArangoDB以与SQL类似的方式进行匹配 . 但是,您必须处理要执行LIKE的字段:(您必须将对象设置为顶层,具有必需属性_key等)
您可能想重新考虑您的数据模型 . 您的文档存储两种不同类型的实体,诊所和程序 .
您可以将诊所存储在
clinics
集合中,并将其程序存储在procedures
集合中(通过分离为两个集合来启用可选的重复数据删除) . 然后通过临床记录中的一系列程序将诊所与诊所联系起来,或者通过边缘收集将临床和程序文件与边缘联系起来 .如果要保留当前数据模型,请使用以下AQL查询:
在您的情况下,不可能使用缩写语法(
[*]
运算符) .方法是从文档中删除
procedures
属性,添加新属性procedure
和匹配的过程对象作为值 . 问题是,如果LIKE()
找到多个程序,将返回多个结果 . 你可以LIMIT
这到1
低于FILTER
,但这可能是不可取的 .要返回单个结果,将
procedures
属性简化为匹配过程,则需要子查询: