This project designs and implements a database for an Internship Application Tracker. Originally built as a normalized relational database in PostgreSQL (Project 1), the system has been adapted to a document-based MongoDB database (Project 2). The platform models core entities such as users, job applications, companies, job postings, interviews, offers, contacts, and tags.
For the MongoDB adaptation, the 12 normalized relational tables were restructured into 2 root collections — users and applications — using embedded documents and denormalization following MongoDB best practices. Company details, job postings, status history, interviews, offers, contacts, and tags are all embedded within application documents. The project includes a conceptual UML model, a hierarchical ERD, example JSON collection definitions, mock data with import instructions, and five MongoDB queries covering the aggregation framework, complex search criteria with logical connectors, document counting, and update operations.
ai-usage: AI tools (Claude) were used to assist with generating mock data, structuring JSON collection examples, and drafting MongoDB queries.
uml diagram: See uml_conceptual_model.pdf
erd: See ERD.pdf
video link: https://drive.google.com/file/d/1kd0l6zKO0ql9kmw8Gtn2wXIBPdJjz8_B/view?usp=sharing
- users — one document per student (name, email, university, major, graduation year)
- applications — one document per job application, with company, job posting, status history, interviews, offer, contacts, and tags all embedded inside
mongorestore --db internship_tracker ./data/dump/internship_trackerOr import manually:
mongoimport --db internship_tracker --collection users --file data/users.json --jsonArray
mongoimport --db internship_tracker --collection applications --file data/applications_reshaped.json --jsonArrayNote:
applications_reshaped.jsonwas generated by runningnode data/reshape.js, which converts the flat Mockaroo export into nested MongoDB documents.
cd internship-app
npm install
node app.jsThen open http://localhost:3000 in your browser.
mongosh
use internship_trackerThen paste any query from queries/queries.js.
| # | Description | Requirement |
|---|---|---|
| Q1 | Applications grouped by industry | Aggregation |
| Q2 | Active co-op/internship apps paying $30+/hr | $and + $or |
| Q3 | Count applications for user_id 1 | Count |
| Q4 | Flip is_active to false for user_id 1 |
Update |
| Q5 | All offers sorted by most recent | General query |
https://drive.google.com/file/d/1kd0l6zKO0ql9kmw8Gtn2wXIBPdJjz8_B/view?usp=sharing