我正在尝试删除一个mongodb对象,然后将其删除后,我想删除与该mongodb对象相关的所有内容。包括我的mongo数据库中的嵌套mongodb对象。
var parentObjectSchema = new mongoose.Schema({
name: String,
split: Number,
parts: [
{
type: mongoose.Schema.Types.ObjectId,
ref: "ChildObjectSchema"
}
],
});
var childObjectSchema = new mongoose.Schema({
name: String,
number: Number,
things: [
{
type: mongoose.Schema.Types.ObjectId,
ref: "Things"
}
],
});
因此,我试图删除parentObject以及随之而来的childObjects。不知道我该怎么做。我成功删除了parentObject,但是childObject仍然在mongodb中,占用了空间。有什么想法吗?
答案 0 :(得分:0)
MongoDB不像其他数据库那样提供外键的概念。 Mongoose在客户端库中具有便捷的方法,该方法使用多个查询并结合结果将您的文档与其他文档一起填充:
https://mongoosejs.com/docs/populate.html
如果要进行级联删除,则需要在要删除的父级文档中获取子级的对象ID,然后对这些子级文档执行删除。
这是一个简化的示例:
const deleteThing = (thingId) => {
thingObjectSchema.remove({ _id: thingId });
};
const deleteChild = (childId) => {
childObjectSchema.findOne({ _id: childId }).select('things').lean().exec((err, child) => {
for (const thingId of child.things) {
deleteThing(thingId);
}
childObjectSchema.remove({ _id: childId });
})
};
const deleteParent = (parentId) => {
parentObjectSchema.findOne({ _id: parentId }).select('parts').lean().exec((err, parent) => {
for (const childId of parent.parts) {
deleteChild(childId);
}
parentObjectSchema.remove({ _id: parentId });
})
};
// note: not actually tested