1

使用 SQL - match 查询 OrientDB (2.2.x) 时,匹配特定类的所有文档的简单查询无法返回任何结果,而使用“select”语句的看似等效的查询工作得很好。

例如,此查询返回 0 个结果:

match {class:ClassA} return $matches

其中,此查询返回我期望的 100 条记录:

select * from ClassA

在我的数据库中,有 100 条“ClassA”类型的记录。我可以在 Schema Manager 中看到 ClassA 已定义并且有 100 条与之关联的记录。此外,从管理器中选择“查询全部”会正确返回所有 100 条记录。我错过了什么?

4

3 回答 3

1

return $matches等效于return $patterns)仅返回定义了别名的模式节点的结果。在你的情况下,他们都没有。为了让它工作,你可以

  • 为节点添加别名:

    match {class:ClassA, as:a} return $matches 
    
  • 或替换$matches$paths(也返回没有别名的节点):

    match {class:ClassA} return $paths 
    
于 2017-04-24T12:36:49.470 回答
0

如果您不想编写要选择的每个属性,可以这样做:

SELECT expand(classa) FROM (match {class:ClassA, as:classa} return classa)
于 2017-04-24T08:22:36.350 回答
0

你有没有尝试过这样的事情?我认为您应该一起使用 select 和 match 来获取正确的数据, match 只会匹配条件,但是当我们需要属性时,我们需要将它们添加到显式选择中。

这个查询对我的会员课程有用。

     select member.firstName, member.lastName, member.email from (MATCH {class: Member, as:member} return member);

好吧,我进入 OrientDB 已经 2 天了,所以这里可能会有更好的答案。

于 2017-04-24T05:29:46.373 回答