Samrong Prey Kabbas
Samrong Prey Kabbas

Reputation: 454

Mongo: query documents from multi-collection

There are two tables such as student and class:

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

In sql is ok, but in mongodb, I know the MongoDB does not support joins, but I don't want put in one collection, I want to put in 2 collections and query it and return in one data. reason that I want to do like this, please see this

so how can I do?

Upvotes: 0

Views: 183

Answers (1)

Alexey Kamenskiy
Alexey Kamenskiy

Reputation: 2948

Currently Mongodb does not support cross collection requests and AFAIK there is no plan to do such a functionality. It differs with the whole concept of document based databases.

We faced same issue with Mongodb earlier working with Nodejs project. The solution for us was to put subdocuments into another collection with a reference to parent document by _id parameter of Mongodb. Large part of it was handled by Mongoose ORM, but in its core it still will do two different requests - one for retrieving parent document and another for retrieving all children where parent document will still have a parameter array with list of _id of all its children.

This is a difference in schema design pattern between SQL and NoSQL. In SQL the schema is fixed and changing it is sometimes painful, but you benefit from this fixed schema by ability to do complex requests. In NoSQL there is no fixed schema, all schema is in your head (and perhaps documentation) and you yourself need to follow it, but this provides you a good speed on database level.

UPDATE: After all we ended up with merging two collections into one. There still were some problems with quering subdocuments from parent document, but it was pretty easy and did not change much for us. I would recommend you looking into this rather than splitting into two separate collections. it also primarily depends on the workflow with your DB, will you be doing more read queries or more write queries? With NoSQL schema you need also consider those points. If more reading - single collection is a way to go.

Upvotes: 2

Related Questions