mongodb Mongo无向图数据库

toe95027  于 2023-03-01  发布在  Go
关注(0)|答案(1)|浏览(145)

我需要创建一个基于MongoDB及其$graphlookup函数的图形数据库来回答以下问题:
让我们假设我有一个人与人之间事务列表。下面是一个事务示例:

{
  from: "A",
  to: "B",
  value: 1
}

我需要创建一个描述这种连接的无向图。每个节点都应该是一个人,每个边都应该有一个体积:这两个人之间的交易数量。
例如,如果给我以下列表:

[
{
  from: "A",
  to: "B",
  value: 1
},
{
  from: "B",
  to: "A",
  value: 3
}
]

这两个事务都应该用一条体积为2边来表示。
我的问题是我不明白mongo $graphlookup如何创建一个无方向的关系。
在上传到mongodb数据库之前,数据是否需要进行预处理?我应该如何查询它以获得一个类似于结果的无方向图?
我需要实现以下结果。给定输入:

[
  {
    from: "A",
    to: "B",
    value: 1
  },
  {
    from: "B",
    to: "A",
    value: 3
  },
  {
    from: "C",
    to: "A",
    value: 6
  },
  {
    from: "C",
    to: "A",
    value: 10
  },
  {
    from: "A",
    to: "C",
    value: 20
  }
]

我想创建一个graphlookup,它将返回以下类型的内容:

{
   "startedAddress": "A",
   "neighboors": [
      {"address": "C", "volume": 3, "depth": 1},
      {"address": "B", "volume": 2, "depth": 1}
   ]
}
ztmd8pv5

ztmd8pv51#

使用$setUnion创建一个数组来存储边的2个端点,并使用结果作为id来执行$group以计算体积之和。

db.collection.aggregate([
  {
    "$group": {
      "_id": {
        "$setUnion": [
          [
            "$from"
          ],
          [
            "$to"
          ]
        ]
      },
      "volume": {
        "$sum": 1
      }
    }
  }
])

Mongo Playground

相关问题