我想知道什么是将用户映射到城市的正确模式。
我是嵌入信息还是创建引用。
我的主要用途是能够识别接近特定用户的所有用户。所以我认为嵌入是正确的。
然而,嵌入信息的问题是,如果我决定更改一个城市的名称,或者为一个将为所有用户更新的城市添加额外的信息,会发生什么。我该怎么做?
我有一个MongoDB用户集合,希望能够找到接近其他用户的所有用户。我想我可以用这个
发布于 2016-02-29 14:26:20
解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}],
// ...
}
https://stackoverflow.com/questions/35709715
复制相似问题