Mongo db将用户映射到城市和经度纬度

时间:2016-02-29 21:10:34

标签: mongodb

我想知道将用户映射到城市的正确架构是什么。

我是否嵌入了信息或创建参考。

我的主要用途是能够识别特定用户附近的所有用户。所以我认为嵌入是正确的。

然而,如果我决定要更改城市的名称,或者为将为所有用户更新的城市添加额外信息,那么嵌入信息的问题就会发生。我该怎么做?

我有一个MongoDB用户集合,希望能够找到与另一个用户关系密切的所有用户。我猜这个我可以用

1 个答案:

答案 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}],
    // ...
}