MongoDB - 模拟连接或子查询
问题:MongoDB - 模拟连接或子查询 我试图找出在 Mongo 中构建数据的最佳方法,以模拟 SQL 中的简单连接或子查询。 假设我有经典的用户和帖子示例,用户在一个集合中,帖子在另一个集合中。我想查找城市为“伦敦”的用户的所有帖子。 我在这个问题中简化了一些事情,在我的现实世界场景中,将帖子作为数组存储在用户文档中是行不通的,因为每个用户不断插入 1,000 个“帖子”。 Mongos $
问题:MongoDB - 模拟连接或子查询
我试图找出在 Mongo 中构建数据的最佳方法,以模拟 SQL 中的简单连接或子查询。
假设我有经典的用户和帖子示例,用户在一个集合中,帖子在另一个集合中。我想查找城市为“伦敦”的用户的所有帖子。
我在这个问题中简化了一些事情,在我的现实世界场景中,将帖子作为数组存储在用户文档中是行不通的,因为每个用户不断插入 1,000 个“帖子”。
Mongos $in 操作员可以在这里提供帮助吗? $in 可以处理包含 10,000,000 个条目的数组吗?
解答
老实说,如果您不能将“帖子”放入“用户”中,那么您有两个选择。
-
非规范化帖子内的一些用户数据。然后,您可以只搜索一个集合。
-
做两个查询。 (一个找用户,另一个找帖子)
根据您的问题,您正在尝试执行 #2。
从理论上讲,您可以构建一个用户 ID(或参考)列表,然后找到属于该数组的用户$in
的所有帖子。但显然这种方法是有限的。
$in 可以处理包含 10,000,000 个条目的数组吗?
看,如果您打算为一组 10,000,000 个用户中的所有用户“查询”您的帖子,那么您已经过了“查询”阶段。您说自己每个用户都有 1,000 条帖子,所以您正在谈论查询“居住在伦敦的帖子的用户”_ 返回 100 毫秒的记录。
100M 记录不是查询,而是数据集!
如果您担心破坏$in
命令,那么我强烈建议您使用 map/reduce。 Mongo Map/Reduce 将为您创建一个新集合。然后,您可以根据需要修剪或汇总此数据集。
更多推荐
所有评论(0)