2013-04-03 3 views
6

Я новичок в node.js и MongoDB. Я использую Mongoose Library для доступа к MongoDB с node.js.Удалить встроенный документ в mongoose

У меня есть две схемы, книги и автор. Автор принадлежит к книге и книге has_many Автор.

я это в моих схемах:

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

Нет, нет какой-либо проверки целостности данных встроенной Однако можно добавить, что с помощью «удалить» промежуточное программное обеспечение, как и в [этом ответ] (Http:. // StackOverflow .com/а/14349259/1259510). – JohnnyHK

ответ

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)