Mongo:从多个集合中查询文档

时间:2013-12-18 04:08:58

标签: sql mongodb

有两个表,如学生和班级:

SELECT student.name, class.subj
        FROM student
        INNER JOIN class
        ON student.class_id = class.class_id;

在sql中没问题,但在mongodb中, 我知道 MongoDB 不支持连接, 但我不想放入一个集合, 我想放入2个集合并查询它并返回一个数据。 我想这样做的原因,请参阅this

所以我该怎么办?

1 个答案:

答案 0 :(得分:2)

目前Mongodb不支持交叉收集请求,AFAIK也没有计划执行此类功能。它与基于文档的数据库的整个概念不同。

Mongodb之前使用Nodejs项目遇到了同样的问题。我们的解决方案是将子文档放入另一个集合中,并通过Mongodb的_id参数引用父文档。它的很大一部分是由Mongoose ORM处理的,但在它的核心中它仍然会做两个不同的请求 - 一个用于检索父文档,另一个用于检索所有子文档,其中父文档仍然具有列表为_id的参数数组所有的孩子。

这是SQL和NoSQL之间架构设计模式的差异。在SQL中,模式是固定的,并且更改它有时很痛苦,但是您可以通过执行复杂请求的能力从此固定模式中受益。在NoSQL中没有固定的模式,所有模式都在您的脑海中(可能还有文档),您自己需要遵循它,但这为您提供了良好的数据库级速度。

UPDATE:毕竟我们最终将两个集合合并为一个。从父文档中查询子文档仍然存在一些问题,但它非常简单,对我们来说没有太大变化。我建议你研究这个,而不是分成两个单独的集合。它还主要取决于您的数据库的工作流程,您将进行更多的读取查询或更多的写入查询?使用NoSQL架构,您还需要考虑这些点。如果更多阅读 - 单一收集是一种方法。