我目前有一个非常非结构化的 mongodb 数据库。我试图在 twitter 上提取一组给定配置文件的所有关注者。我的数据库如下所示:
{'123':1
'123':2
'123':3
'567':8
'567':9
}
其中每个键是用户,值是单个关注者。当我尝试在这些键上创建索引时,我只是用完了可用索引,因为我有很多用户(800 万)。谷歌搜索后,我发现我可以拥有的最大索引数约为 64。如何在此数据库上创建正确的索引?或者你会建议我用不同的方式来存储我的数据吗?
我目前有一个非常非结构化的 mongodb 数据库。我试图在 twitter 上提取一组给定配置文件的所有关注者。我的数据库如下所示:
{'123':1
'123':2
'123':3
'567':8
'567':9
}
其中每个键是用户,值是单个关注者。当我尝试在这些键上创建索引时,我只是用完了可用索引,因为我有很多用户(800 万)。谷歌搜索后,我发现我可以拥有的最大索引数约为 64。如何在此数据库上创建正确的索引?或者你会建议我用不同的方式来存储我的数据吗?
您应该以不同的方式构建数据。
我建议您收集“用户”文档,其中每个用户都有一个“关注者”数组。该数组应填充关注用户的唯一标识符(如姓名、_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" } } );