如何禁用/停用mongoDB数据库中的数据,而不是使用nodejs删除

vh0rcniy  于 2022-11-03  发布在  Go
关注(0)|答案(2)|浏览(157)

当我在postman中点击delete方法时,我需要禁用MongoDB中的数据,而不是完全删除。2怎么做呢?

router.delete("/admin/delete_profile/:id", async (req, res) => {
  try {
    await SomeModel.findByIdAndDelete(req.params.id.trim());
    return send(res, RESPONSE.SUCCESS);
  } catch (err) {
   // res.status(404).send(err.message);
    return send(res, RESPONSE.UNKNOWN_ERROR);
  }
});

schema.js

const { json } = require("body-parser");
const mongoose = require("mongoose");

const Schema = mongoose.Schema;

const SomeModelSchema = new Schema({
  first_name: {
    type: String,
    required: true,
  },

  last_name: {
    type: String,
    required: true,
  },

  image: {
    data: Buffer,
    type: String,
    required: true,
  },
});

module.exports = mongoose.model("SomeModel", SomeModelSchema);
z2acfund

z2acfund1#

您可以在数据库中保留一个类似isActive:true的关键字,以便进行软删除。当您点击delete api时,您只需将此关键字更改为false即可。这样,您就可以将此文档与其他文档区分开来,并且当您需要列表时,您可以在查询中检查包含isActive:true的文档。

zdwk9cvp

zdwk9cvp2#

事实上,在我看来,@PawanYadav建议的方法是一个很好的方法。
在架构中声明Boolean标志isActive(默认为true):

const SomeModelSchema = new Schema({
  first_name: {
    type: String,
    required: true,
  },
  last_name: {
    type: String,
    required: true,
  },
  image: {
    data: Buffer,
    type: String,
    required: true,
  },
  isActive: {
    type: Boolean,
    default: true,
  }
});

并使用findByIdAndUpdate将标志设置为false以禁用数据:

try {
    await SomeModel.findByIdAndUpdate(req.params.id.trim(), {
      isActive: false,
    });
    return send(res, RESPONSE.SUCCESS);
  } catch (err) {
    // res.status(404).send(err.message);
    return send(res, RESPONSE.UNKNOWN_ERROR);
  }

相关问题