I'm building a small movie-reference database, and I would like to be able to delete an object from within an array.
For reference/background, I have this schema:
const movieSchema = new mongoose.Schema({
title: {type: String, required: false},
year: {type: String, required: false},
image: {type: String, required: false},
description: {type: String, required: false},
plot: {type: String, required: false},
references: [{title: String, reference: String, mediaType: String, timestampM: Number, timestampS: Number, description: String, relevance: String, refImg: String}]
})
My goal is to be able to delete the individual references within an array. I'm still learning so I'm at a bit of a loss. How should I have it set up? To edit/add references, I have my edit routes here:
app.get('/movies/:id/edit', (req, res) =>{
Movie.findById(req.params.id, (err, foundMovie) =>{
res.render('editMovie.ejs', {movies: foundMovie})
})
})
app.put('/movies/:id', (req, res) => {
Movie.findByIdAndUpdate(
req.params.id,
{
$push: {
references: req.body,
}
},{new:true}, (err, foundMovie)=> {
res.redirect('/movies')
})
console.log(req.params.id)
})
I've tried a few solutions, including the below, with no success.
<%
for (let i= 0; i < movies.references.length; i++) {
%>
<ul id="refList">
<li id="movieReference" class="refTitle"><%= movies.references[i].reference%></li>
<li id="movieSource"><p id="category"> Source Media:</p><p id="catInfo"><%= movies.references[i].mediaType %></p></li>
<li id="movieTimestamp"><p id="category">Timestamp:</p><%=movies.references[i].timestampM %> minutes, <%=movies.references[i].timestampS %> seconds. <br> <br></li>
<li id="movieDescription"><p id="category">Description: </p><%=movies.references[i].description%><br><br></li>
<li id="catImg"><img class="boxImg" src="<%=movies.references[i].refImg%>"></li>
<li id="delete"><button onclick="Movie.update(
{ $pull: { references: { id: movies.references[i].id}}},
false,
true,
); ">Delete Reference</button></li>
</ul>
<% } %>
What am I missing? I know I can easily create a Delete route that deletes the entire movie entry, but I am looking for a solution that simply deletes an array object by its ID.