0

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

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

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

4

1 回答 1

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 运算符可用于删除数组条目:

db.users.update({name:"userA"}, { $pull: { followers: "userB" } } );
于 2012-09-12T20:22:58.203 回答