我将用户社交媒体数据存储在mongo db中。我有用户集合,其中包含所有用户文档。在用户文档中,我想在Sports类别中存储他喜欢的所有页面。我在用户文档中将他喜欢的所有页面的数组存储为“Sports”。 如果我想获得所有喜欢特定体育版页面的用户,例如Sachin Tendulkar,我可以使用mongoDB中的find()来检索它,但是它将搜索数百万个用户文档以获得结果。这将影响绩效。
示例架构:
{
name: "XYZ",
Bday: "07/25/1990",
email: "xyz@yahoo.com",
location: "India",
gender: "male",
Sports: ["Sachin Tendulkar", "John Cena", "Federer", "Nadal", "Ronaldo",....]
}
我究竟想要什么:
我想存储数据,以便我可以根据不同的标准(视图)获取信息。考虑一个立方体。多维数据集的一侧为我提供基于用户的数据,另一方为我提供基于类别的信息等。 如何使用MongoDB实现这一目标?
提前致谢。
答案 0 :(得分:1)
MongoDB允许您在包含数组的字段上创建索引。在这种情况下,阵列中的每个条目都将单独编制索引。所以当你这样做时:
db.users.ensureIndex({Sports:1});
你可以做到
db.users.find({Sports:"Federer"});
并且您将使用仅索引查询在Sports
数组中的任何位置获得具有该值的所有用户。
答案 1 :(得分:1)
您需要考虑两件事。
索引:对于每个条件(视图),您需要创建索引。例如,以下两个索引说明了两个可能的查询:
db.users.ensureIndex({Sports:1});
这会在Sports
上创建索引,因此包含Sports
的所有查询都会很快:db.users.find({Sports:"Sachin Tendulkar"});
db.users.ensureIndex({location:1});
现在,location
上的任何查询都会非常快:db.users.find({location:"India"});