使用 ArangoDB EDGES 函数,无法使用 includeVertices 选项获得正确的顶点

Using ArangoDB EDGES function, can't get the right vertex with includeVertices options

用ArangoDB描述好友关系,想知道特定用户A的好友,因为是测试样本,所以知道A和B是好友

我在文档集合和边缘集合中有用户,其中包含从“_from”与“_to”成为朋友的信息。如果 A 是 B 的朋友,则 B 必须是 A 的朋友。即:如果有一条边 _from A _to B,则另一条边 _from B _to 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)的顶点。 我尝试使用 "inbound" 作为方向,而不是 "outbound".

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 的顶点。这三个结果似乎不一致:对于 "inbound"/"outbound" :顶点是 u4,而对于 "any" 顶点是 "u1"。 我的代码中有错误吗?我应该使用的选项?

谢谢,

鲍勃·西特龙

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

我刚刚修复了它,它将包含在下一个 2.6 中。错误修复版本和 2.7(开发)。 预期的行为如您所描述。

您真的需要存储在 Edge 中的信息吗? 如果不是,您可以考虑在这种情况下使用 NEIGHBORS 函数,它的性能更高。