Json ArangoDB按字符串字段搜索
我想在ArangonDB中的特定集合的特定字段中通过文本进行简单搜索。类似于以下内容(在SQL中): 我需要搜索对象(文档?)的字符串字段,该字段是数组的一部分,数组是我实际文档的字段:Json ArangoDB按字符串字段搜索,json,arangodb,foxx,Json,Arangodb,Foxx,我想在ArangonDB中的特定集合的特定字段中通过文本进行简单搜索。类似于以下内容(在SQL中): 我需要搜索对象(文档?)的字符串字段,该字段是数组的一部分,数组是我实际文档的字段: [ { "name": "Unimed", "procedures": [ { "type": "Exames", "name": "Endoscopia" }, { "type": "Exame",
[
{
"name": "Unimed",
"procedures": [
{
"type": "Exames",
"name": "Endoscopia"
},
{
"type": "Exame",
"name": "Hemograma"
}
]
}
]
例如,我希望检索所有名称类似于“字符串”的过程,在我的clinics集合的所有文档中进行搜索
我一直在阅读全文索引,但我不知道如何创建或使用它们
任何帮助都会很好
编辑
我几乎得到了我想要的。我的问题是现在只返回我想要的信息
FOR clinic IN clinics
FILTER LIKE(clinic.procedures[*].name, '%hemogram%', true)
RETURN{
clinic_name: clinic.name,
procedure: clinic.procedures
}
这将返回给我给定诊所中的所有过程(过程是诊所中的一个数组),而不仅仅是字段名为“LIKE”我的搜索字符串的过程。如何实现这一点?ArangoDB以与SQL类似的方式进行匹配。但是,您必须对要在上执行的字段进行寻址: (必须有一个对象作为toplevel,并带有强制属性_key等)
您可能需要重新考虑您的数据模型。您的文档存储两种不同类型的实体:诊所和程序 您可以将诊所存储在
clinics
集合中,将其过程存储在procedures
集合中(通过将其分离为两个集合启用可选的重复数据消除功能)。然后通过诊所记录中的一组程序id将诊所链接到程序,或者使用边缘集合将诊所和程序文档与边缘链接
如果要保留当前数据模型,请使用以下AQL查询:
FOR clinic IN clinics
FOR proc IN clinic.procedures
FILTER LIKE(proc.name, "%hemo%", true)
RETURN MERGE(
UNSET(clinic, "procedures"),
{procedure: proc}
)
在您的案例中不可能使用缩写语法([*]
运算符)
方法是从文档中删除procedures
属性,添加一个新属性procedures
,并将匹配的procedures对象作为值。问题是,如果LIKE()
找到多个过程,则会返回多个结果。您可以将限制为过滤器下方的1
,但这可能不是您想要的
若要返回单个结果,将procedures
属性简化为匹配过程,则需要一个子查询:
FOR clinic IN clinics
LET p = (
FOR proc IN clinic.procedures
FILTER LIKE(proc.name, "%hemo%", true)
RETURN proc
)
RETURN MERGE(
clinic,
{procedures: p}
)
我的查询是这样的,但是您给我的语句返回了一个错误。“过程”是我的文档(诊所)的一个数组字段,里面有对象,这些对象有一些字段,其中哪一个是我要查询的字符串字段。
FOR clinic IN clinics
FOR proc IN clinic.procedures
FILTER LIKE(proc.name, "%hemo%", true)
RETURN MERGE(
UNSET(clinic, "procedures"),
{procedure: proc}
)
FOR clinic IN clinics
LET p = (
FOR proc IN clinic.procedures
FILTER LIKE(proc.name, "%hemo%", true)
RETURN proc
)
RETURN MERGE(
clinic,
{procedures: p}
)