javascript - 使用 DELETE 请求删除 MongoDB 集合中的最后一个文档
问题描述
我是 REST api 的新手,想简单地使用带有 mongoose 的 DELETE 路由删除我的 mongoDB 集合中的最后一个 POST。此处的其他答案并未解释如何通过路由执行此操作..仅使用 db 对象。
这是我当前路线的样子(我没有收到错误,但没有删除):
//DELETE LAST POST
router.delete('/last', async (req,res) => {
try {
const removedPost = await Post.findAndModify({query :{},"sort": { "_id": -1 }, remove:true})
res.json(removedPost)
}catch(err){
res.json({ message: err })
}
})
我也试过这样做,findOneAndDelete()
但它是一样的,日志中没有错误,200 OK 响应,没有帖子删除:
const removedPost = await Post.findOneAndDelete(
{ __v: 0 },
{ sort: { "date": -1 } }
);
我也试过这样没有可选的“投影”,因为我从文档中了解到:
const removedPost = await Post.findOneAndDelete(
{},
{ sort: { "date": -1 } }
);
我在邮递员中调用这条路线:https://ag-sheets-api.herokuapp.com/posts/last,没有任何正文。它的响应是 200 OK 并且:
{
"message": {
"stringValue": "\"last\"",
"kind": "ObjectId",
"value": "last",
"path": "_id",
"reason": {}
}
}
这是其中一篇文章的样子:
_id:6012f937a892270017007b31
title:"97273282974158320"
date:2021-01-28T17:49:43.582+00:00
__v:0
en1:"<div class="contact_us"><p style="font-size: 16px; font-weight: bold; ..."
en2:"<div class="qw"><div class="qe" data-country="cn.svg"><p class="qr">Ch..."
en3:"<div class="qw"><div class="qe" data-country="iq.svg"><p class="qr">Ir..."
en4:"<div class="qw"><div class="qe" data-country="pe.svg"><p class="qr">Pe..."
en5:"<div class="qw"><div class="qe" data-country="ta.svg"><p class="qr">Tr..."
fr1:"<div class="contact_us"><p style="font-size: 16px; font-weight: bold; ..."
fr2:"<div class="qw"><div class="qe" data-country="cn.svg"><p class="qr">Ch..."
fr3:"<div class="qw"><div class="qe" data-country="iq.svg"><p class="qr">Ir..."
fr4:"<div class="qw"><div class="qe" data-country="pe.svg"><p class="qr">Pe..."
fr5:"<div class="qw"><div class="qe" data-country="ta.svg"><p class="qr">Tr..."
de1:"<div class="contact_us"><p style="font-size: 16px; font-weight: bold; ..."
de2:"<div class="qw"><div class="qe" data-country="cn.svg"><p class="qr">Ch..."
de3:"<div class="qw"><div class="qe" data-country="iq.svg"><p class="qr">Ir..."
de4:"<div class="qw"><div class="qe" data-country="pe.svg"><p class="qr">Pe..."
de5:"<div class="qw"><div class="qe" data-country="ta.svg"><p class="qr">Tr..."
大多数stackoverflow对这个问题的回答都在下面说这样的话,但我不明白如何在猫鼬DELETE路由中实现这一点,毕竟那里没有db对象?他们在哪里做这个?:
db.coll.find().sort({_id:-1}).limit(100);
It looks like using limit on the standard mongo remove operation isn't supported though, so you might use something like this to delete the 100 documents:
for(i=0;i<100;i++) {
db.coll.findAndModify({query :{}, sort: {"_id" : -1}, remove:true})
}
解决方案
你可以这样尝试:
let x = await Post.findOne({}).sort({date: -1});
await x.remove();
所以你的路线应该是这样的:
router.delete("/", async (req, res) => {
try {
let x = await Post.findOne({}).sort({ date: -1 });
await x.remove();
res.status(200).json({ message: "deleted place" })
} catch (err) {
res.json({ message: err });
}
});
推荐阅读
- postgresql - 在 Postgresql 中计算相似字符串的数量
- python - 如何计算 python pandas 中最常见的 3 种类型?
- sql - 创建案例表达式时出现问题
- c++ - 检查字符串是否为有效数字(根本没有字母)
- c# - C#中的遍历路径
- python-3.x - Python 嵌套列表理解
- c# - WPF 将控件动态添加到 UserControl 的特定区域
- c# - C# IF 语句不排除字符串
- c - 什么数据结构可以用来替代 4 维数组
- python - Dialogflow POST:方法列表意图代码 400:方法:projects.agent.intents.list