我正在尝试删除具有此架构的用户。
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
删除用户的帖子,然而,现在我的疑问和问题。剩下的我怎么做?是否有一个最佳的方法来执行删除用户和他的数据?
1条答案
按热度按时间i7uaboj41#
是的,在MongoDB中,当对特定文档发出删除请求时,您可以使用级联删除的概念来删除不同集合中的相关数据。但是,必须谨慎地实现此行为,以确保数据的完整性和一致性。MongoDB不像某些关系数据库那样提供原生级联删除功能,因此您需要在应用程序级别处理这个问题。
以下是在MongoDB中实现级联删除的一般方法:
->确定哪些集合与要删除的集合有关系。例如,您可能在两个集合之间存在父子关系,从父集合中删除文档也应该从子集合中删除相关文档。
->当您收到一个删除文档的请求时,您的应用程序需要处理删除逻辑。这通常涉及:
从主集合中删除文档。标识相关集合并从中删除关联文档。->如果相关的删除需要是原子的(全有或全无),您可以使用MongoDB事务来确保删除过程中多个集合之间的数据一致性。