尝试删除 Node express 中的单行时删除所有记录 mongoDb
Deleting all records when trying to delete single row in Node express mongoDb
我在我的应用程序中显示多个用户的数据,其中有个人编辑和删除功能 record.I 我正在使用 Node express 框架并使用 MongoDb 作为 database.My问题是当我删除任何特定记录时,所有记录都从 table 中删除,当我在控制台中显示结果时,它只显示我打算删除的记录。
下面是我的代码:
index.ejs
div class="container">
<% if(users.length>0) {%>
<p>Total available users - <%= users.length %> </p>
<table class="table">
<thead class="thead-dark">
<tr>
<th scope="col">Name</th>
<th scope="col">Email</th>
<th scope="col">City</th>
<th scope="col">Action</th>
</tr>
</thead>
<tbody>
<% for(var i=0;i<users.length;i++) { %>
<tr>
<td><%= users[i].name %></td>
<td><%= users[i].email %></td>
<td><%= users[i].city %></td>
<td><a href="/edit/<%= users[i]._id %>">Edit</a> | <a id = "del" href="/delete/<%= users[i]._id %>"> Delete </a> </td>
</tr>
<% } %>
</tbody>
</table>
<% } else{ %>
<p>No data found</p>
<% } %>
</div>
产量低于 ui:
Student.js 架构
const mongoose = require('mongoose');
const studentSchema = new mongoose.Schema({
name:{
type:String,
required:true
},
email:{
type:String,
required:true
},
city:{
type:String,
required:true
},
timeCreated:{
type:Date,
default:()=>Date.now()
}
});
module.exports = mongoose.model('Student',studentSchema);
server.js
const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const Student = require('./models/Student');
const dotEnv = require('dotenv').config();
const cors = require('cors');
const app = express();
const port = process.env.PORT || 3000;
app.use(cors());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:true}));
app.set('views', path.join(__dirname, 'views'));
app.set('view engine','ejs');
app.use("/public", express.static('public'));
app.use(express.static(path.join(__dirname,'public')));
app.get('/delete/:id',(req,res) => {
mongoose.connect(process.env.URI,{useNewUrlParser:true,
useUnifiedTopology:true}).then(() =>
Student.findOneAndDelete(req.params.id, (err,result) => {
if(err){
console.log("Error",err);
}
else{
res.redirect('/');
console.log(result + " - " + req.params.id);
}
})
).catch((err) => console.log(err));
});
app.listen(port,() => console.log(`App is running at ${port}`));
有人告诉我为什么删除的是所有记录,而不是我想删除的记录。
Mongoose 提供了两个类似的方法: findOneAndDelete which takes JavaScript object representing query as first parameter or findByIdAndDelete 可以将 ObjectId
作为第一个参数。因此,您可以将代码更改为:
Student.findOneAndDelete({ _id: req.params.id }, (err,result) => {
或
Student.findByIdAndDelete(req.params.id, (err,result) => {
还要确保类型匹配 - 如果 req.params.id
作为字符串出现并且您将 ID 存储为 ObjectId
那么您需要转换它们(示例 here)。
你能尝试 delete 请求而不是 get
app.delete('/delete/:id',(req,res) => {
mongoose.connect(process.env.URI,{useNewUrlParser:true,
useUnifiedTopology:true}).then(() =>
Student.findOneAndDelete({_id: req.params.id}, (err,result) => {
if(err){
console.log("Error",err);
}
else{
res.redirect('/');
console.log(result + " - " + req.params.id);
}
})
).catch((err) => console.log(err));
});
<td><a href="/edit/<%= users[i]._id %>">Edit</a> | <form action="/delete/<%= users[i]._id %>" method="POST">
<input type="hidden" name="id" value="<%= users[i]._id %>"/>
<button>DELETE</button>
</form></td>
我在我的应用程序中显示多个用户的数据,其中有个人编辑和删除功能 record.I 我正在使用 Node express 框架并使用 MongoDb 作为 database.My问题是当我删除任何特定记录时,所有记录都从 table 中删除,当我在控制台中显示结果时,它只显示我打算删除的记录。
下面是我的代码:
index.ejs
div class="container">
<% if(users.length>0) {%>
<p>Total available users - <%= users.length %> </p>
<table class="table">
<thead class="thead-dark">
<tr>
<th scope="col">Name</th>
<th scope="col">Email</th>
<th scope="col">City</th>
<th scope="col">Action</th>
</tr>
</thead>
<tbody>
<% for(var i=0;i<users.length;i++) { %>
<tr>
<td><%= users[i].name %></td>
<td><%= users[i].email %></td>
<td><%= users[i].city %></td>
<td><a href="/edit/<%= users[i]._id %>">Edit</a> | <a id = "del" href="/delete/<%= users[i]._id %>"> Delete </a> </td>
</tr>
<% } %>
</tbody>
</table>
<% } else{ %>
<p>No data found</p>
<% } %>
</div>
产量低于 ui:
Student.js 架构
const mongoose = require('mongoose');
const studentSchema = new mongoose.Schema({
name:{
type:String,
required:true
},
email:{
type:String,
required:true
},
city:{
type:String,
required:true
},
timeCreated:{
type:Date,
default:()=>Date.now()
}
});
module.exports = mongoose.model('Student',studentSchema);
server.js
const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const Student = require('./models/Student');
const dotEnv = require('dotenv').config();
const cors = require('cors');
const app = express();
const port = process.env.PORT || 3000;
app.use(cors());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:true}));
app.set('views', path.join(__dirname, 'views'));
app.set('view engine','ejs');
app.use("/public", express.static('public'));
app.use(express.static(path.join(__dirname,'public')));
app.get('/delete/:id',(req,res) => {
mongoose.connect(process.env.URI,{useNewUrlParser:true,
useUnifiedTopology:true}).then(() =>
Student.findOneAndDelete(req.params.id, (err,result) => {
if(err){
console.log("Error",err);
}
else{
res.redirect('/');
console.log(result + " - " + req.params.id);
}
})
).catch((err) => console.log(err));
});
app.listen(port,() => console.log(`App is running at ${port}`));
有人告诉我为什么删除的是所有记录,而不是我想删除的记录。
Mongoose 提供了两个类似的方法: findOneAndDelete which takes JavaScript object representing query as first parameter or findByIdAndDelete 可以将 ObjectId
作为第一个参数。因此,您可以将代码更改为:
Student.findOneAndDelete({ _id: req.params.id }, (err,result) => {
或
Student.findByIdAndDelete(req.params.id, (err,result) => {
还要确保类型匹配 - 如果 req.params.id
作为字符串出现并且您将 ID 存储为 ObjectId
那么您需要转换它们(示例 here)。
你能尝试 delete 请求而不是 get
app.delete('/delete/:id',(req,res) => {
mongoose.connect(process.env.URI,{useNewUrlParser:true,
useUnifiedTopology:true}).then(() =>
Student.findOneAndDelete({_id: req.params.id}, (err,result) => {
if(err){
console.log("Error",err);
}
else{
res.redirect('/');
console.log(result + " - " + req.params.id);
}
})
).catch((err) => console.log(err));
});
<td><a href="/edit/<%= users[i]._id %>">Edit</a> | <form action="/delete/<%= users[i]._id %>" method="POST">
<input type="hidden" name="id" value="<%= users[i]._id %>"/>
<button>DELETE</button>
</form></td>