【问题标题】:OrientDB SQL: Include rids from connected verticesOrientDB SQL:包括来自连接顶点的消除
【发布时间】:2016-11-21 15:42:11
【问题描述】:

我有一个顶点“A”连接到顶点“B”和“C”。

我想用 B 和 C 的记录 ID 的附加列表查询 A。

属性外观示例:

A:
{
   "@rid": "#1:0",
   "property": "ValueForA"
}

B:
{
   "@rid": "#2:0",
   "property": "ValueForB"
}

C:
{
   "@rid": "#2:1",
   "property": "ValueForC"
}

我想要一个 A 的查询给我:

{
    "@rid": "#1:0",
    "property": "ValueForA",
    "connected": ["#2:0", "#2:1"]
}

我希望能够仅通过预测来做到这一点。它适用于 B 和 C 中的任何自定义字段,但对于 @rid 我得到一个链接(为什么会出现这种不一致?)。

我试过了:

SELECT @rid, *, out().@rid as connected FROM #1:0

这正是我想要的,但列表中的rids 是指向记录的链接,而不仅仅是rids。

SELECT @rid, *, out().@rid.asString() as connected FROM #1:0

这给出了:

{
    "@rid": "#1:0",
    "property": "ValueForA",
    "connected": "[#2:0, #2:1]"
}

连接的属性只是一个字符串。

@rid 和其他属性的这种不一致可能(希望如此?)有一个原因。正如我所写的,如果@rid 是“id”,那么第一个示例可以正常工作。无论如何,我想知道一个简单的方法来做到这一点,因为我觉得应该很容易做到。

更新

在上面的示例中添加 id 作为属性示例是一种误导,因为它可能以某种方式暗示它是唯一的(尽管我从未这么说过),所以我将其删除。我添加它们只是为了将 3 条记录分开。但是,record-id 是用作分隔上述顶点的唯一 id,因此无法使用记录的任何属性。为了进一步澄清,记录可以具有任意属性。不仅是上面给出的示例。

同样,第一个问题是是否可以使用投影?

进一步的 cmets:我觉得很奇怪,如果我为每条记录创建一个属性“rid”,它的记录 ID 与 @rid 完全相同。为什么我必须这样做(我不会这样做)以使其易于使用。

更新2

我还希望能够同时定位多个顶点并为每个顶点附加连接。我已经使用投影对许多属性(但不是@rid)进行了此操作。

【问题讨论】:

    标签: orientdb orient-sql


    【解决方案1】:

    查询像链接一样返回@rid 是很正常的,这是一种可能的方式。可能是这个:

    select id, property, $a from #21:0
    let $a = (select out() from #21:0 where $parent.current.id = id)
    

    这是输出:

    希望对你有帮助。

    问候

    【讨论】:

    • 嗨!我更新了问题。显然可以做出一些(不正确的)假设。 “id”只是一个示例,并不是唯一的,不应用作定位。还不清楚属性是任意的,所提供的只是更容易解释的示例。其次,上面产生的结果不是我要求的。我要求提供整个记录“A”,但在属性名称“connections”下附加了一个摆脱字符串列表。
    • 关于“很正常”可能是这样。然而,我不能产生这个简单的用例(列出连接的顶点)这一事实并不令人满意。我真的认为(或希望?)这是可能的,只是我不知道如何。如果我在记录中有自己的 rid 副本,它会起作用,但这不是我愿意或应该做的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多