MongoDB-如何根据不同的标准获取数据

MongoDB-如何根据不同的标准获取数据,mongodb,nosql,Mongodb,Nosql,我正在mongo db中存储用户的社交媒体数据。我有一个包含所有用户文档的用户集合。在用户文档中,我想将他喜欢的所有页面存储在运动类别中。我将他喜欢的所有页面的数组存储在用户文档中,并使用key作为“Sports”。 如果我想获得所有喜欢某个特定体育页面的用户,例如Sachin Tendulkar,我可以使用mongoDB中的find()检索此页面,但它将搜索数百万个用户文档以获得结果。这将影响性能 示例架构: { 名称:“XYZ”, B日:“1990年7月25日”, 电子邮件:“xyz@yah

我正在mongo db中存储用户的社交媒体数据。我有一个包含所有用户文档的用户集合。在用户文档中,我想将他喜欢的所有页面存储在运动类别中。我将他喜欢的所有页面的数组存储在用户文档中,并使用key作为“Sports”。 如果我想获得所有喜欢某个特定体育页面的用户,例如Sachin Tendulkar,我可以使用mongoDB中的find()检索此页面,但它将搜索数百万个用户文档以获得结果。这将影响性能

示例架构:

{
名称:“XYZ”,
B日:“1990年7月25日”,
电子邮件:“xyz@yahoo.com",
地点:“印度”,
性别:“男性”,
体育:[“萨钦·滕杜尔卡”、“约翰·塞纳”、“费德勒”、“纳达尔”、“罗纳尔多”…]
}
我到底想要什么:

我希望存储数据,以便根据不同的标准(视图)获取信息。考虑立方体。立方体的一面根据用户给我提供数据,另一面根据类别给我提供信息,等等。 如何使用MongoDB实现这一点


提前感谢。

MongoDB允许您在包含数组的字段上创建索引。在这种情况下,数组中的每个条目都将被单独索引。所以当你这样做的时候:

db.users.ensureIndex({Sports:1});
你能行

db.users.find({Sports:"Federer"});

你将得到所有的用户,该值在<代码> Stase数组中,只有索引查询。

有两件事需要考虑。

  • 索引:对于每个条件(视图),您需要创建索引。例如,以下两个索引说明了两种可能的查询:

    db.users.ensureIndex({Sports:1})

这将在
Sports
上创建索引,因此包含
Sports
的所有查询都将很快:
db.users.find({Sports:Sachin Tendulkar})

现在,对
location
的任何查询都将非常快:
db.users.find({location:“India”})

  • 如果您的集合越来越大,我的意思是,即使您不满意索引,您也需要跨多台计算机(分区)。切分是一个主题,它本身需要一个全新的会话,因此您需要先阅读教程
考虑你的问题。在这一点上,它危险地接近于征求工具或产品的建议,而这些工具或产品不会被看好。尽量把解决数据分析问题说得更具体些,然后你可能会得到一些帮助。谢谢你的建议。还有一个建议。尝试一些示例数据来说明。即使是一个小样本。程序员喜欢用数据来解决问题。您对文档模式的描述很难理解。你能发布一个示例文档吗?我已经添加了文档的示例。这会考虑性能吗?因为系统中有几十亿的用户。
db.users.ensureIndex({location:1});