So I have a schema right now for a users profile and I want to update the media related to that profile and store it mongodb the way we identify a user is through their username as they are unique on the site I tried the push method but it doesn’t seem to work, the profile is found correctly just trying to update the existing field object we don’t want to override what is stored at that object either just add to what is already there.
here is the schema:
const mongoose = require("mongoose");
const medallionProfileSchema = new mongoose.Schema({
firstName: {
type: String,
required: true,
unique: false,
},
middleName: {
type: String,
required: false,
unique: false,
},
lastName: {
type: String,
required: true,
unique: false,
},
title: {
type: String,
required: false,
unique: false,
},
relationship: {
type: String,
required: false,
unique: false,
},
media: {
title: {
type: String,
required: false,
},
description: {
type: String,
required: false,
},
mediaType: {
type: String,
required: false,
},
mediaLink: {
type: String,
required: false,
},
},
});
const profileSchema = new mongoose.Schema({
username: {
type: String,
required: true,
unique: true,
},
email: {
type: String,
required: true,
unique: true,
},
dateCreated: {
type: Date,
required: false,
unique: false,
},
bio: String,
// Add other profile-related fields as needed
medallionProfile: medallionProfileSchema, // Embed MedallionProfile schema
});
const Profile = mongoose.model("Profile", profileSchema);
module.exports = Profile;
here is the function to carry out the update the req.body params are present and correct:
const uploadProfileMedia = async (req, res) => {
try {
// Extract data from the request body
const { username, title, description, mediaType, mediaLink } = req.body;
// Find the profile document associated with the provided username
const profile = await Profile.findOne({ username });
console.log("profile in uploading media ", profile);
// If the profile doesn't exist, return an error
if (!profile) {
return res.status(404).json({ error: "Profile not found" });
}
// Add the new media to the profile
profile.medallionProfile.media.push({
title,
description,
mediaType,
mediaLink,
});
// Save the updated profile document
await profile.save();
// Respond with a success message
res.status(200).json({ message: "Media uploaded successfully" });
} catch (error) {
// Handle errors
console.error("Error uploading profile media:", error);
res.status(500).json({ error: "Internal server error" });
}
};