我正在尝试找出在Mongo中构建数据的最佳方法,以模拟SQL中的简单连接或子查询.
假设我有经典的用户和帖子示例,其中一个集合中的用户和另一个集合中的帖子.我想查找所有城市是"伦敦"的用户的帖子.
我在这个问题中简化了一些事情,在我的真实场景中,将帖子作为数组存储在用户文档中将无法正常工作,因为每个用户不断插入1000个"帖子".
Mongos $ in运营商可以帮忙吗?$ $可以处理10,000,000个条目的数组吗?
老实说,如果你不能将"帖子"放到"用户"中,那么你有两种选择.
对帖子内部的一些用户数据进行非规范化.然后,您只需搜索一个集合.
做两个查询.(一个找用户另一个找帖子)
根据你的问题,你正在努力做#2.
从理论上讲,您可以构建一个用户ID(或引用)列表,然后查找属于该用户的所有帖子$in
.但显然这种方法是有限的.
$ $可以处理10,000,000个条目的数组吗?
看,如果您计划在一组10,000,000个用户中 "查询"所有用户的帖子,那么您已经过了"查询"阶段.你自己说每个用户有1000多个帖子,所以你在谈论一个查询"有住在伦敦的帖子的用户"返回100M的记录.
100M记录不是查询,这是一个数据集!
如果您担心违反$in
命令,那么我强烈建议您使用map/reduce.Mongo Map/Reduce将为您创建一个新的系列.然后,您可以根据需要修剪或汇总此数据集.