你应该以不同的方式构造你的数据。
我会建议你有一个“用户”文件的集合,其中每个用户都有一个数组“追随者”。这个数组应该填充关注用户的唯一标识符(如姓名,_id或您自己的ID号码)。
{ name: "userA",
followers: [
"userB",
"userC"
]
},
{ name: "userB",
followers: [
"userD",
"userF"
]
},
然后,您可以在followers字段上创建索引,以快速找到所有跟随其他用户的用户。当你想找到谁遵循用户“用户X”,“userY”和“userZ”的所有用户,那么您需要与此查询做到这一点:
db.users.find({followers: { $all: ["userX", "userY", "userZ" ] } });
编辑:
添加跟随器给用户,使用$推操作者:
db.users.update({name:"userA"}, { $push: { followers: "userB" } });
的$拉操作者可以被用来去除阵列enries:
db.users.update({name:"userA"}, { $pull: { followers: "userB" } });
每个集合可以有64个不同的索引_definitions_;我知道这些索引可以支持的文档数量没有限制。 – JohnnyHK
我所有的800万条目都在一个集合中。在我上面的例子中,我将需要2个索引。一个索引键123,另一个索引567.我有近3000个这样的唯一键。 – Amitash
好吧,听起来像索引你当前的模式是不可行的,你需要考虑修改你的模式,以便你的'123','567'等键变成共同的值而不是。 – JohnnyHK