我有以下数据集:

{
  _id: ObjectId("asdasdasd..."),
  dependencies: {
    customers: [
      ObjectId("1..."),
      ObjectId("2...")
    ]
  }
}

我使用“$graphlookup”来查看所有相互关联的客户。
db.getCollection('customers').aggregate([{
  $graphLookup: {
    from: "customers",
    startWith: "$dependencies.customers",
    connectFromField: "dependencies.customers",
    connectToField: "_id",
    depthField: "depth",
    as: "dependencies.customers",
    maxDepth: 5,
  }
}])

一切正常。但现在我想按相反的顺序查找图表。依赖关系树中的最后一个客户对其他客户没有其他依赖关系。否则我就不会是那棵树上最后一个顾客了。
是否有可能看到所有依赖于树中最后一个客户的客户?
例如
正常Graphlookup:
C1=>C2=>C3=>…
背面图案:
C3=>C2=>C1
也许我需要改变模式…但我不知道怎么做。
另一个选择是存储两种不同类型的依赖项:父、子。但这使得所有更改都必须执行两次:对于父级中具有依赖项x的客户,以及对于子级中具有依赖项x的客户。
有什么想法吗?

最佳答案

数据需要指明关系的方向(例如parent=>child或child=>parent)。我看到的方法是在一个表示关系的数组中存储数据。对你来说,就是这样:

{
  _id: ObjectId("asdasdasd..."),
  dependencies: {
    customers: [
      ObjectId("1..."),
      ObjectId("2...")
    ],
    customersOf: [
      ObjectId("1..."),
      ObjectId("2...")
    ],
  }
}

这样就可以在每个方向上遍历数据
// get customers
db.getCollection('customers').aggregate([{
  $graphLookup: {
    from: "customers",
    startWith: "$dependencies.customers",
    connectFromField: "dependencies.customers",
    connectToField: "_id",
    depthField: "depth",
    as: "dependencies.customers",
    maxDepth: 5,
  }
}])


// get customersOf (reverse direction)
db.getCollection('customers').aggregate([{
  $graphLookup: {
    from: "customers",
    startWith: "$dependencies.customersOf",
    connectFromField: "dependencies.customersOf",
    connectToField: "_id",
    depthField: "depth",
    as: "dependencies.customersOf",
    maxDepth: 5,
  }
}])

关于mongodb - MongoDB:$ graphLookup以相反的顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43784935/

10-11 07:32