由于 CastERror,我无法更新我的猫鼬模式,这很有意义,但我不知道如何解决它。
旅行模式:
var TripSchema = new Schema({
name: String,
_users: [{type: Schema.Types.ObjectId, ref: 'User'}]
});
用户架构:
var UserSchema = new Schema({
name: String,
email: String,
});
在我的 html 页面中,我呈现了一次旅行,可以将新用户添加到这次旅行中,我通过调用 Schema 上的 findById 方法来检索数据:
exports.readById = function (request, result) {
Trip.findById(request.params.tripId).populate('_users').exec(function (error, trip) {
if (error) {
console.log('error getting trips');
} else {
console.log('found single trip: ' + trip);
result.json(trip);
}
})
};
这个作品找到了。在我的用户界面中,我可以将新用户添加到旅行中,代码如下:
var user = new UserService();
user.email = $scope.newMail;
user.$save(function(response){
trip._users.push(user._id);
trip.$update(function (response) {
console.log('OK - user ' + user.email + ' was linked to trip ' + trip.name);
// call for the updated document in database
this.readOne();
})
};
问题是,当我更新我的架构时,旅行中的现有用户被填充,这意味着存储为旅行中没有 ID 的对象,新用户在旅行中存储为 ObjectId。在我更新之前,如何确保填充的用户返回到 ObjectId?否则更新将失败并出现 CastError。