使用ArangoDB EDGES函数,无法使用includeVertices选项

时间:2015-09-21 15:23:56

标签: arangodb edges aql

使用ArangoDB描述朋友关系,我想知道特定用户A的朋友。因为这是一个测试样本,我知道A是B的朋友。

我在文档集合和边缘集合中有用户,其中包含来自“_from”的朋友到“_to”的信息。如果A是B的朋友,B必须是A的朋友。即:如果有一个边_从A到B,则从B到A的另一边_确实存在。

我在朋友收藏中使用EDGES功能,知道哪个是用户“u4”的朋友,_id是2465087832.他必须是“u1”的朋友,_id是2462335320。 因为我想拥有的不仅仅是文档ID,所以我将选项“includeVertices”设置为true。

这是我的要求。

LET out = EDGES(friends, "db/2465087832", "outbound", null, {includeVertices: true})

答案是:

[
    {
      "edge": {
        "_id": "db/2468102488",
        "_from": "db/2465087832",
        "_to": "db/2462335320",
        "_rev": "2468102488",
        "_key": "2468102488"
      },
      "vertex": {
        "_id": "db/2465087832",
        "_key": "2465087832",
        "_rev": "3962323288",
        "id": "u4"
      }
    }
  ]

因此,我有优势(u4是u1的朋友),但包含的顶点是来自请求用户的一个(id:u4)。 我尝试使用“入站”作为方向,而不是“出站”。

LET out = EDGES(friends, "db/2465087832", "inbound", null, {includeVertices: true})

结果是:

 [
    {
      "edge": {
        "_id": "db/2468364632",
        "_from": "db/2462335320",
        "_to": "db/2465087832",
        "_rev": "2468364632",
        "_key": "2468364632"
      },
      "vertex": {
        "_id": "db/2465087832",
        "_key": "2465087832",
        "_rev": "3962323288",
        "id": "u4"
      }
    }
  ]

正如你所看到的,仍然是“u4”作为顶点,即使边缘是好的(u1是u4的朋友)。

最后,我尝试使用“any”作为方向。

LET any = EDGES(friends, "db/2465087832", "any", null, {includeVertices: true})

令人惊讶的答案:

[
    {
      "edge": {
        "_id": "friends/2468364632",
        "_from": "user/2462335320",
        "_to": "user/2465087832",
        "_rev": "2468364632",
        "_key": "2468364632"
      },
      "vertex": {
        "_id": "user/2462335320",
        "_rev": "3956687192",
        "_key": "2462335320",
        "id": "u1"
      }
    },
    {
      "edge": {
        "_id": "friends/2468102488",
        "_from": "user/2465087832",
        "_to": "user/2462335320",
        "_rev": "2468102488",
        "_key": "2468102488"
      },
      "vertex": {
        "_id": "user/2462335320",
        "_rev": "3956687192",
        "_key": "2462335320",
        "id": "u1"
      }
    }
  ]

这里答案包含正确的边(A到B和B到A),但是对于这两个顶点都是来自u1的顶点。这三个结果似乎是不一致的:对于“入站”/“出站”:顶点是u4,对于“任何”,顶点是“u1”。 我的代码中有错误吗?我应该使用哪个选项?

谢谢,

BobCitron

1 个答案:

答案 0 :(得分:1)

非常感谢您发现这一点,它实际上是我们核心中的一个错误而不是您的代码

我刚刚解决了它,它将包含在下一个2.6中。 bugfix发布和2.7(开发)。 预期的行为如您所述。

您是否真的需要存储在边缘的信息? 如果没有,你可以考虑在这种情况下使用NEIGHBORS功能,这是更高效的。