在mongodb中添加索引

时间:2012-09-12 20:01:02

标签: mongodb

我目前有一个非常非结构化的mongodb数据库。我试图在twitter上提取给定一组配置文件的所有关注者。我的数据库如下所示:

{'123':1
 '123':2
 '123':3
 '567':8
 '567':9
}

每个键都是用户,值是单个跟随者。当我尝试在这些键上创建索引时,我只是用完了可用的索引,因为我有很多用户(800万)。在谷歌搜索后,我发现我可以拥有的最大索引数约为64.如何在此数据库上创建正确的索引?或者你会建议我以不同的方式存储我的数据吗?

1 个答案:

答案 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" } } );