gpt4 book ai didi

MongoDB:$graphLookup 以相反的顺序

转载 作者:可可西里 更新时间:2023-11-01 10:49:32 24 4
gpt4 key购买 nike

我有以下数据集:

{
_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

也许我需要更改模式...但我不知道该怎么做。

另一种选择是存储 2 种不同类型的依赖项:父项、子项。但这使得有必要对所有更改进行两次:对于在父项中具有依赖项 X 的客户以及在子项中具有依赖项 X 的客户。

有什么想法吗?

最佳答案

您的数据需要指明关系的方向(例如父=>子或子=>父)。我看到这样做的方式是将数据存储在一个指示关系的数组中。对你来说,就像这样:

{
_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:$graphLookup 以相反的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43784935/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com