MongoDB-模拟联接或子查询
我试图找出在Mongo中构造数据的最佳方法,以模拟SQL中的简单联接或子查询 假设我有一个经典的用户和帖子示例,用户在一个集合中,帖子在另一个集合中。我想找到所有的用户谁的城市是“伦敦”的帖子 在这个问题上,我简化了一些事情,在我的真实场景中,在用户文档中以数组形式存储帖子是行不通的,因为每个用户不断插入1000篇“帖子”MongoDB-模拟联接或子查询,mongodb,Mongodb,我试图找出在Mongo中构造数据的最佳方法,以模拟SQL中的简单联接或子查询 假设我有一个经典的用户和帖子示例,用户在一个集合中,帖子在另一个集合中。我想找到所有的用户谁的城市是“伦敦”的帖子 在这个问题上,我简化了一些事情,在我的真实场景中,在用户文档中以数组形式存储帖子是行不通的,因为每个用户不断插入1000篇“帖子” Mongos$in操作员可以在此提供帮助吗?$in可以处理10000000个条目的数组吗?我也有类似的设置,但我的设置是针对“用户”和“消息”的。我所做的是添加对用户的引用,
Mongos$in操作员可以在此提供帮助吗?$in可以处理10000000个条目的数组吗?我也有类似的设置,但我的设置是针对“用户”和“消息”的。我所做的是添加对用户的引用,有点像外键。我使用用户集合中生成的“_id”并将其作为键存储在“messages”中。对于用户发送的每一条消息,我都将其保存到“messages”集合中。你应该仔细阅读,我想这就是你要找的
您必须运行多个查询,但您绝对应该在应用程序端执行此操作。$in可以处理100000个条目。我从未尝试过10000000个条目,但查询(查询也是文档)必须小于4mb(就像每个文档一样),因此100000000个条目是不可能的 为什么不将用户及其所在城镇包括在Posts集合中?您可以索引此城镇,因为您可以索引嵌入实体的属性。您不再需要模拟加入,因为您可以查询嵌入用户所在城镇的帖子
这意味着当用户所在城市发生变化时,您必须更新帖子,但这种情况并不经常发生。如果在Posts集合中为UserId编制索引,此更新将非常快 老实说,如果你不能将“帖子”融入“用户”,那么你有两个选择
$的所有帖子。但显然,这种方法是有限的
$in可以处理10000000个条目的数组吗
看,如果你打算在一组10000000用户中为所有用户“查询”你的帖子,那么你已经远远超过了“查询”阶段。你自己说每个用户都有1000条帖子,所以你说的是一个查询“居住在伦敦的有帖子的用户”,返回100毫秒的记录
100M记录不是查询,而是数据集强>
如果您担心在
命令中破坏$in,那么我强烈建议您使用map/reduce。Mongo Map/Reduce将为您创建一个新集合。然后,您可以根据需要缩减或汇总此数据集。作为旁注,文档限制在最近的64位版本中已显著提高。(24MB)