【问题标题】:Traverse up in ArangoDB在 ArangoDB 中向上遍历
【发布时间】:2016-02-24 00:30:34
【问题描述】:

我正在尝试使用 PHP 学习 ArangoDB。我目前设置了以下图表:

用户 -> userEmail -> 电子邮件

'User' 和 'Email' 是顶点集合,'userEmail' 是边集合。

我正在使用此模型进行用户身份验证,根据请求,代码会将给定的电子邮件与数据库进行匹配,获取该节点并返回传入的“userEmail”边缘和“用户”节点,但前提是属性“主要”在“userEmail”边缘设置为“TRUE”。

当前解决方案

我正在使用以下作为当前解决方案,但我认为这不是实现我想要的最佳方式。它也没有给我一种方法来检测 'userEmail' 边缘上的 'primary' 字段

FOR e IN email
    FILTER e.address == @email
    RETURN {
        'email': e,
        'user': NEIGHBORS(email, userEmail, e, 'inbound', [], {includeData:true})
    }

其他解决方案

我也用过这个方案,结果一样

FOR e IN email
    FILTER e.address == @email
    LET u = (NEIGHBORS(email, userEmail, e, 'inbound', [], {includeData:true}))
    RETURN u

另一种解决方案

我想出的另一个解决方案是

FOR e in email
    FILTER e.address == @email
    FOR p IN TRAVERSAL(user, userEmail, e._id, "inbound", {paths: true})
    RETURN p

这将返回顶点和边,但仅在第二组结果中正确。我可以硬编码以使用第二组返回值,但我认为这不是最好的方法。

当前的解决方案是最好的还是有更好的方法来做我想做的事?

【问题讨论】:

    标签: arangodb arangodb-php


    【解决方案1】:

    您应该使用 ArangoDB 2.8 new style pattern matching traversals 开始。让我们为此采用query with the geoindex

    FOR oneEmail IN email
      FILTER oneEmail.address == @email
      FOR v, e IN 1..1 INBOUND oneEmail userEmail
        FILTER e.primary == true
        RETURN {
          'email': oneEmail.address,
          'user': v
        }
    

    要在old style NEIGHBORS queries 中添加您在问题中使用的主要过滤器,请使用edgeExamples 参数:

    FOR e IN email
      FILTER e.address == @email
      RETURN {
        'email': e,
        'user': NEIGHBORS(email, userEmail, e, 'inbound',
                          [{ Primary : true }],
                          {includeData:true})
      }
    

    一般来说,如果电子邮件始终只能属于一个用户(1:n 关系),我会质疑您对图表的选择是否是首选方式,and joins without an edge collection 会是更好的选择。

    【讨论】:

    • 你是否建议我只做用户->电子邮件,其中“电子邮件”集合将包含用户 ID?类似于关系数据库?
    • 没错。正确工作的正确工具。 ArangoDB 作为多模型数据库,让您可以选择合适的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多