Mongodb 在mogodb中添加索引

Mongodb 在mogodb中添加索引,mongodb,Mongodb,我目前有一个非常非结构化的mongodb数据库。我正试图提取推特上给定一组个人资料的所有追随者。我的数据库如下所示: {'123':1 '123':2 '123':3 '567':8 '567':9 } 其中每个键都是用户,值是单个跟随者。当我试图在这些键上创建一个索引时,我只是用完了可用的索引,因为我有很多用户(800万)。在谷歌搜索之后,我发现我能拥有的最大索引数大约是64。如何在此数据库上创建适当的索引?或者您能为我提供一种不同的数据存储方式吗?您应该以不同的方式构建数据 我建议

我目前有一个非常非结构化的mongodb数据库。我正试图提取推特上给定一组个人资料的所有追随者。我的数据库如下所示:

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

其中每个键都是用户,值是单个跟随者。当我试图在这些键上创建一个索引时,我只是用完了可用的索引,因为我有很多用户(800万)。在谷歌搜索之后,我发现我能拥有的最大索引数大约是64。如何在此数据库上创建适当的索引?或者您能为我提供一种不同的数据存储方式吗?

您应该以不同的方式构建数据

我建议您收集“用户”文档,其中每个用户都有一个“追随者”数组。这个数组应该填充跟随的用户的唯一标识符(如名称、\u id或您自己的id号)

然后,您可以在followers字段上创建索引,以快速查找跟随其他用户的所有用户。当您想要查找所有跟随用户“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" } } );

每个集合可以有64个不同的索引定义;据我所知,这些索引支持的文档数量没有限制。我的800万个条目都在一个集合中。在上面的示例中,我需要2个索引。一个用于索引键123,另一个用于索引键567。我有将近3000个这样独特的键。听起来好像是不可行的来索引你当前的模式,你需要考虑修改你的模式,以便你的<代码> '123' ,<代码> '567' ,等等。键变成了一个公共密钥的值。谢谢。我正试图使我的密钥成为外部密钥的一部分。在这种情况下,一个列表可以包含100多万个追随者。如何轻松地插入和更新此字段?另外,我不能创建一个看起来像:{followers:{'123':456,'123':567,…}的数据库吗?这不起作用,因为字段'123'不能同时具有值456和567。我在回答的末尾添加了一段,解释了如何从数组中添加和删除单个条目。
db.users.update({name:"userA"}, { $pull: { followers: "userB" } } );