Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
107 views
in Technique[技术] by (71.8m points)

javascript - Delete last document in MongoDB collection with DELETE request

I'm new to REST apis and want to simply delete the last POST in my mongoDB collection using a DELETE route with mongoose. The other answers on here do not explain how to do this via a route.. only using the db object.

This is what my current route looks like (I'm getting no errors but it's not deleting):

//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 })
  }
})

I've also tried doing it with findOneAndDelete() but it's the same, no errors in the logs, 200 OK response, no posts delete:

const removedPost = await Post.findOneAndDelete(
      { __v: 0 },
      { sort: { "date": -1 } }
    );

I've also tried it like this without the optional 'projection' as i understand it from the docs:

const removedPost = await Post.findOneAndDelete(
      {},
      { sort: { "date": -1 } }
    );

I'm calling this route in postman: https://ag-sheets-api.herokuapp.com/posts/last, without any body. And it's response is 200 OK and:

{
    "message": {
        "stringValue": ""last"",
        "kind": "ObjectId",
        "value": "last",
        "path": "_id",
        "reason": {}
    }
}

This is what one of the posts looks like:

_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..."

Most stackoverflow answers to this question say something like this below, but I don't understand how that can be achieved inside a mongoose DELETE route, after all there is no db object is there? Where are they doing this?:

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})
}
question from:https://stackoverflow.com/questions/65944047/delete-last-document-in-mongodb-collection-with-delete-request

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

you can try like this :

let x = await Post.findOne({}).sort({date: -1});
await x.remove();

so your route should be like this :

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 });
  }
});

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...