schemaA和schemaB之间存在一对多的关系。如果我调用schemaA.remove();我希望删除所有相关的schemaB。如果我调用schemaB.remove(),我希望删除对instanceA中schemaB的引用。
使用
SchemaA
.pre('remove', function (next) {
var instanceBIdArray = this.instanceBIdArray;
async.map(instanceBIdArray, function (instanceBId, callback) {
SchemaB.findByIdAndRemove(instanceBId, function (err, instanceB) {
if (err) callback(err);
if (!instanceB) callback('instanceB not found.');
callback(null, instanceBId);
});
},
function (err, results) {
if (err) next(new Error('Something went wrong with deleting instanceB.'));
return next();
});
});
和
SchemaB
.pre('remove', function (next) {
var self = this;
SchemaA.findByIdAndUpdate(self.instanceAId, {
$pull: {
instanceBIdArray: self._id
}
}, function (err, instanceA) {
if (err) next(new Error('Something went wrong with deleting instanceA.'));
return next();
});
});
每个mongoose模式中的分别似乎是解决这个问题的正确方法。但是,我只能让其中一个工作。如果我有两个express都不会编译,并且会说schemaB不存在。
我认为这与require.js有关,并且为了导出schemaA requirejs需要导出schemaB,反之亦然。非常感谢对此的任何见解!
错误是:MissingSchemaError: Schema hasn't been registered for model "A".