Mongodb 和 Express 从 _id 中删除一个项目
Mongodb and Express deleting an item from _id
我是 Express 和数据库的新手。我正在尝试按照使用 Mongo DB(不是 Mongoose)、Express、Node 和 Handlebars 的几个教程来创建一个简单的 CRUD 待办事项列表。
我可以从输入表单创建项目并将它们成功保存到 Mongo 数据库和页面。我不知道如何根据在页面和数据库中单击按钮来删除每个项目。理想情况下,我想根据 Mongo 创建的 _id
来定位它们。
我认为问题可能与我尝试 select 每个项目的方式有关。任何建议或更简单的方法来实现这个都会很棒!
这是我的 Express 代码:
// Connecting Mongo DB
MongoClient.connect(url, (err, client) => {
if (err) return console.log(err)
db = client.db('todoitems')
})
// Save items to DB from form
app.post('/items', (req, res) => {
db.collection('items').save(req.body, (err, result) => {
if (err) return console.log(err)
console.log(req.body, {_id: req.body._id})
res.redirect('/')
})
})
// Delete item on click from DB
app.delete('/items/:id', (req, res) => {
db.collection('items').remove({_id: req.body.id}, (err, result) => {
if (err) return console.log(err)
console.log(req.body)
res.redirect('/')
})
})
// Get items from DB to page
app.get('/', (req, res) => {
db.collection('items').find().toArray((err, result) => {
if (err) return console.log(err)
res.render('index', {
layout: false,
items: result
});
})
})
这是 Handlebars 文件中的代码:
<form action="/items" method="POST">
<input type="text" placeholder="item" name="item">
<input type="hidden" id="date" name="date" value="CurrentDate">
</form>
<ul>
{{#each items}}
<li>
<span>{{item}} |</span>
<span>{{date}}</span>
<button id={{_id}}>x</button>
</li>
{{/each}}
</ul>
如果您要通过 _id
删除,则需要传递 ObjectID(id)
而不是 "string" id
,例如:
remove({_id: mongodb.ObjectID( req.params.id)} ...
所以,你的代码应该是这样的:
app.delete('/items/:id', (req, res) => {
db.collection('items').remove({_id: mongodb.ObjectID( req.params.id)}, (err, result) => {
if (err) return console.log(err)
console.log(req.body)
res.redirect('/')
})
})
我是 Express 和数据库的新手。我正在尝试按照使用 Mongo DB(不是 Mongoose)、Express、Node 和 Handlebars 的几个教程来创建一个简单的 CRUD 待办事项列表。
我可以从输入表单创建项目并将它们成功保存到 Mongo 数据库和页面。我不知道如何根据在页面和数据库中单击按钮来删除每个项目。理想情况下,我想根据 Mongo 创建的 _id
来定位它们。
我认为问题可能与我尝试 select 每个项目的方式有关。任何建议或更简单的方法来实现这个都会很棒!
这是我的 Express 代码:
// Connecting Mongo DB
MongoClient.connect(url, (err, client) => {
if (err) return console.log(err)
db = client.db('todoitems')
})
// Save items to DB from form
app.post('/items', (req, res) => {
db.collection('items').save(req.body, (err, result) => {
if (err) return console.log(err)
console.log(req.body, {_id: req.body._id})
res.redirect('/')
})
})
// Delete item on click from DB
app.delete('/items/:id', (req, res) => {
db.collection('items').remove({_id: req.body.id}, (err, result) => {
if (err) return console.log(err)
console.log(req.body)
res.redirect('/')
})
})
// Get items from DB to page
app.get('/', (req, res) => {
db.collection('items').find().toArray((err, result) => {
if (err) return console.log(err)
res.render('index', {
layout: false,
items: result
});
})
})
这是 Handlebars 文件中的代码:
<form action="/items" method="POST">
<input type="text" placeholder="item" name="item">
<input type="hidden" id="date" name="date" value="CurrentDate">
</form>
<ul>
{{#each items}}
<li>
<span>{{item}} |</span>
<span>{{date}}</span>
<button id={{_id}}>x</button>
</li>
{{/each}}
</ul>
如果您要通过 _id
删除,则需要传递 ObjectID(id)
而不是 "string" id
,例如:
remove({_id: mongodb.ObjectID( req.params.id)} ...
所以,你的代码应该是这样的:
app.delete('/items/:id', (req, res) => {
db.collection('items').remove({_id: mongodb.ObjectID( req.params.id)}, (err, result) => {
if (err) return console.log(err)
console.log(req.body)
res.redirect('/')
})
})