从mongoose中删除嵌入式文档

6

我是一个新手,正在学习node.js和MongoDB。我使用Mongoose库来访问MongoDB和node.js。

我有两个模式,Book和Author。作者属于一本书,而书有多个作者。

我在我的模式中有以下内容:

var mongoose = require( 'mongoose' );
var Schema   = mongoose.Schema;

var Book = new Schema({
    title : String,
    isbn : String,
    authorId : [{ type: Schema.Types.ObjectId, ref: 'Author' }],
    updated_at : Date
});

var Author = new Schema({
    name  : String,
    updated_at : Date
});

mongoose.model( 'Book', Book );
mongoose.model( 'Author', Author );

mongoose.connect( 'mongodb://localhost/library' );

问题在于,当我从嵌入了书籍的作者文档中删除文档时,它会在不检查引用完整性的情况下被删除。我的情况是,如果作者文档与书籍一起嵌入,则无法删除它。 Mongoose是否会自动检查嵌入在书籍中的作者文档?这可能吗?如果可以,那么如何操作?

1
不,内置没有引用完整性检查。但是,您可以通过“remove”中间件添加它,如此答案所示。 - JohnnyHK
1个回答

1
您可以尝试以下代码来使用您提到的模式。
Author.pre('remove', function(next) {
    Author.remove({name: this.name, updated_at: this.updated_at }).exec();
    Book.remove({authorId : this._id}).exec();
    next();
});

关于 SchemaObj.pre(method,callback) 的更多信息。


以这种方式,我们不需要在控制器中编写findOneAndDelete方法吗? 我的假设是正确的吗? - Dojo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接