MEAN/MongoDB如何实现级联插入?
How to implement cascade insert with MEAN/MongoDB?
我正在尝试为 Mongoose/MongoDB 中具有 1 对多关系的对象实现级联插入,但努力实现它。在这种情况下,大学与部门之间存在一对多关系。这是我的大学对象。
var UniversitySchema = new Schema({
name: {
type: String,
default: '',
trim: true
},
departments: [{
type: Schema.ObjectId,
ref: 'Department'
}]
});
mongoose.model('University', UniversitySchema);
这是我的部门架构:
var DepartmentSchema = new Schema({
name: {
type: String,
default: '',
trim: true
},
University: {
type: Schema.ObjectId,
ref: 'University'
}]
});
mongoose.model('Department', DepartmentSchema);
这是我尝试在架构中放入 post 的内容。基本上当我保存一个部门时,我试图在大学中插入部门 ID 以在两个方向上建立一对多关系。当然,我在创建部门时也保存了大学 ID——这很容易。
DepartmentSchema.post('save', function(next) {
var university = University.find({_id: this.university._id});
if(!university.departments) {
university.departments = [];
}
university.departments.push(new ObjectId(this._id));
university.save().exec();
next();
});
这行报错,说它无法识别大学对象上的保存方法。
university.save().exec();
我也尝试过在模型服务器控制器中执行此操作,但这似乎不正确,因为大多数方法都由 REST 请求包装。当然,我可以通过发出多个请求从客户端处理这个问题,但我想有一种方法可以在服务器端执行此操作。由于这是数据层内部的,在我看来,我应该能够使用 mongo 中间件来处理这个问题。
保存方法必须有回调函数参数,试试这个:
university.save(function (err) {
if (err) return handleError(err);
// saved!
})
查询的结果传递给回调,而不是返回。
var university = University.findOne({_id: this.university._id});
变量university
现在是一个查询对象,而不是查询的结果。这就是你得到 TypeError: Object# < Query > has no method 'save'
的原因。来自查询的结果被传递给查询的回调函数:
University.findOne({_id: this.university._id}, function(err, university){
// here is your result
});
同样,您需要将最终回调传递到您的保存中:
university.save(next)
我正在尝试为 Mongoose/MongoDB 中具有 1 对多关系的对象实现级联插入,但努力实现它。在这种情况下,大学与部门之间存在一对多关系。这是我的大学对象。
var UniversitySchema = new Schema({
name: {
type: String,
default: '',
trim: true
},
departments: [{
type: Schema.ObjectId,
ref: 'Department'
}]
});
mongoose.model('University', UniversitySchema);
这是我的部门架构:
var DepartmentSchema = new Schema({
name: {
type: String,
default: '',
trim: true
},
University: {
type: Schema.ObjectId,
ref: 'University'
}]
});
mongoose.model('Department', DepartmentSchema);
这是我尝试在架构中放入 post 的内容。基本上当我保存一个部门时,我试图在大学中插入部门 ID 以在两个方向上建立一对多关系。当然,我在创建部门时也保存了大学 ID——这很容易。
DepartmentSchema.post('save', function(next) {
var university = University.find({_id: this.university._id});
if(!university.departments) {
university.departments = [];
}
university.departments.push(new ObjectId(this._id));
university.save().exec();
next();
});
这行报错,说它无法识别大学对象上的保存方法。
university.save().exec();
我也尝试过在模型服务器控制器中执行此操作,但这似乎不正确,因为大多数方法都由 REST 请求包装。当然,我可以通过发出多个请求从客户端处理这个问题,但我想有一种方法可以在服务器端执行此操作。由于这是数据层内部的,在我看来,我应该能够使用 mongo 中间件来处理这个问题。
保存方法必须有回调函数参数,试试这个:
university.save(function (err) {
if (err) return handleError(err);
// saved!
})
查询的结果传递给回调,而不是返回。
var university = University.findOne({_id: this.university._id});
变量university
现在是一个查询对象,而不是查询的结果。这就是你得到 TypeError: Object# < Query > has no method 'save'
的原因。来自查询的结果被传递给查询的回调函数:
University.findOne({_id: this.university._id}, function(err, university){
// here is your result
});
同样,您需要将最终回调传递到您的保存中:
university.save(next)