我目前有一个非常非结构化的mongodb数据库。我试图在twitter上提取给定一组配置文件的所有关注者。我的数据库如下所示:
{'123':1
'123':2
'123':3
'567':8
'567':9
}
每个键都是用户,值是单个跟随者。当我尝试在这些键上创建索引时,我只是用完了可用的索引,因为我有很多用户(800万)。在谷歌搜索后,我发现我可以拥有的最大索引数约为64.如何在此数据库上创建正确的索引?或者你会建议我以不同的方式存储我的数据吗?
答案 0 :(得分:0)
您应该以不同方式构建数据。
我建议您拥有一组“用户”文档,其中每个用户都有一个数组“关注者”。此数组应填充跟随的用户的唯一标识符(如姓名,_id或您自己的ID号)。
{ name: "userA",
followers: [
"userB",
"userC"
]
},
{ name: "userB",
followers: [
"userD",
"userF"
]
},
然后,您可以在关注者字段上创建索引,以快速查找关注其他用户的所有用户。如果要查找关注用户“userX”,“userY”和“userZ”的所有用户,您可以使用此查询执行此操作:
db.users.find({followers: { $all: ["userX", "userY", "userZ" ] } });
修改强>
要向用户添加关注者,请使用$ push运算符:
db.users.update({name:"userA"}, { $push: { followers: "userB" } } );
$ pull运算符可用于删除数组enries:
db.users.update({name:"userA"}, { $pull: { followers: "userB" } } );