// Create AUTHOR
db.createCollection("AUTHOR");

// Create BOOK 
db.createCollection("BOOK");

// Create MEMBER 
db.createCollection("MEMBER");

// Create BOOKAUTHOR (BRIDGING VALUE)
db.createCollection("BOOKAUTHOR");

// Create BORROWEDBOOKS (BRIDGING VALUE)
db.createCollection("BORROWEDBOOKS");

// POPULATE into AUTHOR
db.AUTHOR.insertMany([
    { authorID: 1, firstName: "Neil", lastName: "Armstrong" },
    { authorID: 2, firstName: "Cupcake", lastName: "Kahoot" }
]);

// POPULATE into BOOK
db.BOOK.insertMany([
    { ISBN: "978-001", title: "American Gods", publicationYear: 2001 },
    { ISBN: "978-002", title: "Future Tech Innovations", publicationYear: 2028 }
]);

// POPULATE into MEMBER 
db.MEMBER.insertMany([
    { memberID: 101, firstName: "Cameron", lastName: "Pillay", email: "CameronPillay@100%.com", phoneNo: "0812345678" },
    { memberID: 102, firstName: "Sumit", lastName: "Januk" } 
]);

// POPULATE into BOOKAUTHOR
db.BOOKAUTHOR.insertMany([
    { authorID: 1, ISBN: "978-001" },
    { authorID: 2, ISBN: "978-002" }
]);

// POPULATE into BORROWEDBOOKS
db.BORROWEDBOOKS.insertMany([
    { 
        memberID: 101, 
        ISBN: "978-001", 
        dateBorrowed: new Date("2026-05-01"), 
        dueDate: new Date("2026-05-15"), 
        returnDate: new Date("2026-05-20"), 
        fineAmount: 50 
    },
    { 
        memberID: 102, 
        ISBN: "978-002", 
        dateBorrowed: new Date("2026-06-01"), 
        dueDate: new Date("2026-06-15"), 
        returnDate: null, 
        fineAmount: 0 
    }
]);

db.BOOK.find({ 
    publicationYear: { $gt: 2026 } //checks for after 2026
});

db.BORROWEDBOOKS.aggregate([ //checks borrowed books
    { 
        $group: { 
            _id: null, 
            totalFineRevenue: { $sum: "$fineAmount" } //total
        } 
    }
])

db.BORROWEDBOOKS.deleteOne({ //deletes single value
    fineAmount: 50 
});

db.MEMBER.aggregate([
    {
        $lookup: {
            from: "BORROWEDBOOKS",
            localField: "memberID",
            foreignField: "memberID",
            as: "borrowing_info"
        }
    },
    { 
        $unwind: "$borrowing_info" 
    },
    {
        $lookup: {
            from: "BOOK",
            localField: "borrowing_info.ISBN",
            foreignField: "ISBN",
            as: "book_info"
        }
    },
    { 
        $unwind: "$book_info" 
    },
    {
        $project: {
            _id: 0,
            memberID: 1,
            firstName: 1,
            lastName: 1,
            title: "$book_info.title",
            dateBorrowed: "$borrowing_info.dateBorrowed",
            dueDate: "$borrowing_info.dueDate",
            returnDate: "$borrowing_info.returnDate",
            fineAmount: "$borrowing_info.fineAmount"
        }
    }
]);

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: