Welcome to this comprehensive guide on NoSQL! Today, we'll delve into creating user profiles and managing session storage. By the end of this lesson, you'll have a solid understanding of these concepts, empowering you to build robust web applications. 🎯
NoSQL databases, unlike traditional SQL databases, offer flexible, scalable solutions for managing data. Instead of using a traditional relational model, NoSQL databases focus on storing data in a format that suits the application's requirements. 💡
User profiles are essential for personalizing user experiences in web applications. Let's learn how to create user profiles in a MongoDB database, a popular NoSQL database.
MongoDB stores data in JSON-like documents, making it an excellent choice for user profile management. Each document is a self-contained unit that can have varying schemas, unlike SQL databases.
{
"_id": ObjectId("..."),
"username": "john_doe",
"email": "john.doe@example.com",
"password": "encrypted_password",
"created_at": ISODate("2022-01-01T12:00:00.000Z"),
"last_login": ISODate("2022-01-01T13:00:00.000Z")
}📝 Note: MongoDB uses ObjectId for unique document identifiers, and ISODate to represent dates in a standardized format.
Session storage is crucial for tracking user activity across multiple requests. In a traditional web application, session data is stored on the server. However, in a NoSQL environment, we can store session data within the application itself.
Session tokens, also known as session IDs, allow web applications to recognize returning users without needing to maintain state on the server. We can store these tokens in the user's browser and use them to identify the user during subsequent requests.
To store session data in MongoDB, we can create a collection specifically for session tokens and associate each token with the user's data.
{
"_id": "session_token",
"user_id": ObjectId("..."),
"expires_at": ISODate("2022-01-01T14:00:00.000Z"),
"data": {
"cart": {
"item1": 1,
"item2": 2
},
"last_viewed_page": "/products"
}
}📝 Note: The expires_at field helps manage session lifetimes, and the data field can contain any session-related data.
Let's put this knowledge into practice by building a simple e-commerce application. We'll create user profiles, store session data, and manage user sessions.
We'll use Express.js, a popular Node.js web framework, to build our application.
const express = require("express");
const mongoose = require("mongoose");
const app = express();
// Connect to MongoDB
mongoose.connect("mongodb://localhost/ecommerce", { useNewUrlParser: true });
// Define User schema
const userSchema = new mongoose.Schema({
username: String,
email: String,
password: String,
created_at: Date,
last_login: Date
});
// Create User model
const User = mongoose.model("User", userSchema);
// Register a new user
app.post("/register", async (req, res) => {
// ... (handle user registration, create a new user, save the user to the database)
});Next, we'll manage user sessions by creating and updating session tokens.
// Define Session schema
const sessionSchema = new mongoose.Schema({
user_id: { type: mongoose.Schema.Types.ObjectId, ref: "User" },
expires_at: Date,
data: Object
});
// Create Session model
const Session = mongoose.model("Session", sessionSchema);
// Generate and save a new session token
app.post("/login", async (req, res) => {
// ... (authenticate user, generate session token, save the session to the database)
});
// Update session data
app.put("/update_session", async (req, res) => {
// ... (find the session, update the session data, save the session to the database)
});You now have a solid foundation for user profiles and session storage in NoSQL environments. Take some time to practice and explore these concepts in more depth.
What is the purpose of a session token in a web application?