Reputation: 1291
I want to save a new user and add some group as a reference. The group is loaded from database.
var userSchema = new Schema({
email: {type: String, 'default': '', index: {unique: true, dropDups: true}},
password: String,
accessToken: String,
registerDate: { type: Date, 'default': Date.now},
groups: [{type: ObjectId, ref:'Group'}]
});
var groupSchema = new Schema({
name: {type: String, 'default': '', index: {unique: true, dropDups: true}}
});
exports.register = function(req, res, next){
var userToRegister = req.body;
var newUser = new User();
Group.find({name:"User"}, function(err, group){
if(err){
res.send("no User-group found");
}
newUser.set('groups', [group]);
newUser.set('email', userToRegister.email);
newUser.set('password', userToRegister.password);
newUser.save(function(err){
if(err){
res.end("error at saving user", 500);
}
res.end(JSON.stringify(newUser));
});
});
};
But I get the following error:
message "Cast to ObjectId failed for value "{ _id: 52f6b49e13bdfa901b5a64d3, __v: 0, name... (length: 108)"
name "CastError"
path "groups"
stack undefined
type "ObjectId"
As I can see, it is a valid ObjectId. So where could be the error?
Solution:
using: Group.findOne(...) or: newUser.set('groups', [group[0]]);
Upvotes: 1
Views: 1857
Reputation: 6668
.find returns array. use group[0] or use findOne().
newUser.set('groups', [group[0]]);
Upvotes: 1