mongoose 我怎么能删除用户和所有与他有关的ID在mongodb?

gfttwv5a  于 2023-10-19  发布在  Go
关注(0)|答案(1)|浏览(100)

我正在尝试删除具有此架构的用户。

const schema = new mongoose.Schema({
  email: {
    type: String,
    lowercase: true,
    required: true,
    unique: true,
  },
  password: {
    type: String,
    required: true,
  },
  user_data: {
    display_name: {
      type: String,
      maxLength: 10,
      default: null,
    },
    avatar: {
      type: String,
      default: "",
    },
    handle: {
      type: String,
      maxLength: 10,
      lowercase: true,
      default: null,
    },
    country: {
      type: String,
      default: null,
      required: true,
    },
    subscriptionID: {
      type: String,
      default: null,
      required: false,
    },
    utype: {
      type: String,
      default: "user",
      enum: ["user_verified", "org_verified", "user"],
      required: true,
      immutable: (doc) => doc.role !== "ADMIN" || doc.role !== "MODERATOR",
    },

    following: [
      {
        _id: {
          type: mongoose.Schema.ObjectId,
          ref: collection,
        },
      },
    ],
    followers: [
      {
        _id: {
          type: mongoose.Schema.ObjectId,
          ref: collection,
        },
      },
    ],
  },
  user_payment: {
    unpoints: {
      type: Number,
      default: 0,
      max: 1999,
      min: 0,
    },
    currency_id: String,
    history: [
      {
        order_id: String,
        metadata: Map,
        purchase_date: {
          type: Date,
          default: Date.now,
        },
      },
    ],
  },
  developer_data: {
    api_key: {
      type: String,
      unique: true,
      default: null,
    },
  },
  email_verified: {
    type: Boolean,
    default: false,
  },
  role: {
    type: String,
    default: "USER",
    enum: ["USER", "MODERATOR", "ADMIN"],
    immutable: (doc) => doc.role !== "ADMIN",
  },
});

我还有另一个存储发布的模式

const schema = new mongoose.Schema({
  uid: {
    type: mongoose.SchemaTypes.ObjectId,
    ref: userCollection,
  },
  content: { type: String, required: true, maxLength: 250 },
  created_At: {
    type: Date,
    default: Date.now,
  },
  media: Map,
  link: String,
  comments: [
    {
      _id: {
        type: mongoose.SchemaTypes.ObjectId,
        ref: collection,
      },
    },
  ],
});

const snsModel =
  mongoose.models[collection] || mongoose.model(collection, schema);

export default snsModel;

现在我正在寻找的是做以下事情,当用户删除请求被发送时,后端开始删除与之相关的所有内容。这包括,帖子,评论,关注和追随者。问题是,这还必须修改其余的用户,因为其他用户必须从被删除的用户中删除(当然,如果他跟踪他们)。
所以,我的第一个解决方案是使用.post("findOneAndDelete")。然后使用deleteMany删除用户的帖子,然而,现在我的疑问和问题。剩下的我怎么做?是否有一个最佳的方法来执行删除用户和他的数据?

i7uaboj4

i7uaboj41#

是的,在MongoDB中,当对特定文档发出删除请求时,您可以使用级联删除的概念来删除不同集合中的相关数据。但是,必须谨慎地实现此行为,以确保数据的完整性和一致性。MongoDB不像某些关系数据库那样提供原生级联删除功能,因此您需要在应用程序级别处理这个问题。
以下是在MongoDB中实现级联删除的一般方法:
->确定哪些集合与要删除的集合有关系。例如,您可能在两个集合之间存在父子关系,从父集合中删除文档也应该从子集合中删除相关文档。
->当您收到一个删除文档的请求时,您的应用程序需要处理删除逻辑。这通常涉及:
从主集合中删除文档。标识相关集合并从中删除关联文档。->如果相关的删除需要是原子的(全有或全无),您可以使用MongoDB事务来确保删除过程中多个集合之间的数据一致性。

相关问题