我有一个无向图,其中每个节点都包含一个数组。可以从阵列添加/删除数据。将其存储在Mongodb中并能够有效执行此查询的最佳方法是:给定节点A,选择A的相邻节点中包含的所有数据。

在关系数据库中,您可以创建一个表示边的表,以及另一个用于在每个节点中存储数据的表。

table 1
NodeA, NodeB
NodeA, NodeC

table 2
NodeA, item1
NodeA, item2
NodeB, item3

然后,当您查询相邻节点中的数据时,您可以联接表。但是在MongoDB中无法进行联接,因此设置此数据库并有效查询相邻节点中的数据的最佳方法是什么(在空间上稍微提高性能)。

最佳答案

我正在选择mongo,也正在研究这种模式(无向图,从邻居那里查询信息),我认为到目前为止我所喜欢的方式看起来像这样:

每个节点都包含一个邻居键数组,就像这样。

{
 nodeIndex: 4
 myData: "data"
 neighbors: [8,15,16,23,42]
}

要查找邻居的数据,请使用$in "operator":
db.nodes.find({nodeIndex:{$in: [8,15,16,23,42]}});

您可以使用field selection将结果限制为相关数据。
db.nodes.find({nodeIndex:{$in: [8,15,16,23,42]}}, {myData:1});

08-06 17:27