我想知道将用户映射到城市的正确架构是什么。
我是否嵌入了信息或创建参考。
我的主要用途是能够识别特定用户附近的所有用户。所以我认为嵌入是正确的。
然而,如果我决定要更改城市的名称,或者为将为所有用户更新的城市添加额外信息,那么嵌入信息的问题就会发生。我该怎么做?
我有一个MongoDB用户集合,希望能够找到与另一个用户关系密切的所有用户。我猜这个我可以用
答案 0 :(得分:0)
解决方案A :
用户的位置:
用户:
{
_id : 1,
name : "John Doe",
pos : [{longitude}, {latitude}],
city : 1
}
城市:
{
_id : 1,
name : "New York",
// ...
pos : [{longitude}, {latitude}] // only if you need it
}
查找最近的用户(第一个查询),然后查找最近用户的城市(第二个查询)。
解决方案B:
城市的位置:
用户:
{
_id : 1,
name : "John Doe",
city : 1
}
城市:
{
_id : 1,
name : "New York",
// ...
pos : [{longitude}, {latitude}]
}
查找最近的城市(第一个查询),然后查找关闭城市中的所有用户(第二个查询)。
<强> Embeding:强>
通常使用主记录嵌入一些您经常需要的数据。我们假设您也将城市名称添加到用户手中。是的,有一些数据冗余。如果它真的有用(应用程序经常需要这个数据集),请使用它。
在这种情况下,您将保留两个集合。然后您可以在单个数据库命中中读取所有必需的数据。如果您需要更改城市名称,则需要更新城市和所有已编辑城市的用户。您将在应用程序级别执行此操作,并且需要小心保持数据一致性。
用户:
{
_id : 1,
name : "John Doe",
pos : [{longitude}, {latitude}],
city : {
id : 1,
name : "New York"
}
}
城市:
{
_id : 1,
name : "New York",
population : 10000000,
flagFileName : "NewYorkFlag.jpg",
pos : [{longitude}, {latitude}],
// ...
}