3

ArangoDB を使用して友人関係を記述し、特定のユーザー A の友人を知りたいと考えています。これはテスト サンプルなので、A が B と友人であることがわかります。

ドキュメント コレクションと、"_from" から "_to" への情報を含むエッジ コレクションにユーザーがいます。A が B の友人である場合、B は A の友人でなければなりません。つまり、A から B へのエッジがある場合、B から A への別のエッジが存在します。

_id が 2465087832 のユーザー「u4」のフレンドを知るために、フレンド コレクションで関数 EDGES を使用します。ドキュメント 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 の友達です)。

最後に、方向として「任意」を使用してみました。

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 のものです。この 3 つの結果は矛盾しているようです: "inbound"/"outbound" の場合: 頂点は u4 で、"any" の場合は頂点は "u1" です。コードにバグはありますか? 使用すべきオプションは?

ありがとう、

ボブシトロン

4

1 に答える 1