Nested ARANGODB AQL不可能将()与嵌套对象匹配
我使用Nested ARANGODB AQL不可能将()与嵌套对象匹配,nested,match,arangodb,aql,Nested,Match,Arangodb,Aql,我使用MATCHES()AQL函数在arango数据库中搜索与示例匹配的条目。这个特性对于简单的例子很好,但我不能让它在嵌套特性中正常工作。见示例: RETURN MATCHES( { "a" : { "c" : 1 }, "b" : 1 }, { "a" : { "c" : 1 } }, false ) 这将返回true,但是如果我尝试: RETURN MATCHES( { "a&q
MATCHES()
AQL函数在arango数据库中搜索与示例匹配的条目。这个特性对于简单的例子很好,但我不能让它在嵌套特性中正常工作。见示例:
RETURN MATCHES(
{ "a" : { "c" : 1 }, "b" : 1 },
{ "a" : { "c" : 1 } },
false
)
这将返回true
,但是如果我尝试:
RETURN MATCHES(
{ "a" : { "c" : 1, "b" : 1 }},
{ "a" : { "c" : 1 } },
false
)
它返回false!!(我希望返回true)
我在querybyexample
一节中了解到了这一点
他们的解决方案是使用点符号,但它在AQL中不起作用
以他们为例:
RETURN MATCHES(
{ "a" : { "c" : 1, "b" : 1 } },
{ "a.c" : 1 },
false
)
返回false
(我希望返回true)
那么,如何对嵌套属性使用MATCHES()
仅供参考:我使用arangodb v3.5.5-1
澄清:
我想通过给出{a:{c:1,b:1}}
作为示例来获得{a:{c:1}}
的匹配
我已经在ArangoDB存储库中发布了这个问题:
匹配
比较属性-它不关心属性的类型,因此如果您试图匹配嵌套对象,它们必须具有相同的属性/值;因此,您不能对任意深度的结构进行覆盖并检查其对应关系
在给定的示例中,您可以使用LET
选择子结构,并对其使用匹配
LET doc = { "a" : { "c" : 1, "b" : 1 }}
LET a = doc.a
RETURN MATCHES(
a,
{ "c": 1}
)
要利用arangojs功能使用路径窥视结构,您可以编写一个用户函数,使用示例查询并从AQL()调用该函数
注:您的语言的arangodb客户端库应该提供注册用户函数的方便访问(例如,arangodb php
中的class AqlUserFunctions
)。匹配
比较属性-它不关心属性的类型,因此如果您试图匹配嵌套对象,它们必须具有相同的属性/值;因此,您不能对任意深度的结构进行覆盖并检查其对应关系
在给定的示例中,您可以使用LET
选择子结构,并对其使用匹配
LET doc = { "a" : { "c" : 1, "b" : 1 }}
LET a = doc.a
RETURN MATCHES(
a,
{ "c": 1}
)
要利用arangojs功能使用路径窥视结构,您可以编写一个用户函数,使用示例查询并从AQL()调用该函数
注:您的语言的arangodb客户端库应提供方便的访问权限,以注册用户函数(例如,arangodb php
中的class AqlUserFunctions
)。您是否可以编辑您的问题以包含您希望它找到的文档?我已进行了编辑,因此这三个示例包含相同的示例类型。这里的“问题”是已知的。此解决方案与collection.byExample()函数一起使用,但与原始AQL不一起使用,我不知道如何使用AQL。您可以编辑您的问题以包含您希望它找到的文档吗?我已进行编辑,因此这三个示例包含相同的示例类型。这里的“问题”是已知的,这个解决方案使用collection.byExample()函数,但不使用原始AQL,我不知道如何使用AQL