我使用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)
我已经在www.example.com的Query by example
部分了解到这一点https://www.arangodb.com/docs/stable/data-modeling-documents-document-methods.html#query-by-example
他们的解决方案是使用点标记法,但它在AQL中不起作用
以他们为榜样:
RETURN MATCHES(
{ "a" : { "c" : 1, "b" : 1 } },
{ "a.c" : 1 },
false
)
返回false
(我希望返回true)
那么,如何将MATCHES()
用于嵌套属性呢?
仅供参考:我使用arangodb v3.5.5-1
说明:我想通过给出{ "a" : { "c" : 1 } }
作为示例来获得{ "a" : { "c" : 1, "b" : 1 } }
的匹配
我已经在ArangoDB存储库中发布了该问题:https://github.com/arangodb/arangodb/issues/12541
1条答案
按热度按时间u2nhd7ah1#
MATCHES
比较属性--它不关心属性的类型,所以如果要匹配嵌套对象,它们必须具有相同的属性/值;因此,你不能有任意深的结构重叠和检查对应关系。在给出的示例中,您可以挑选出具有
LET
的子结构,并针对该子结构使用MATCHES
要利用arangojs功能使用路径窥视结构,可以编写一个使用按示例查询的用户函数,并从AQL(https://www.arangodb.com/docs/stable/aql/extending.html)调用该函数。
注意:您的语言的arangodb客户端库应该提供对注册用户函数的方便访问(例如
arangodb-php
中的class AqlUserFunctions
)。