我想要2个模型,一个是可以属于多个组的用户,另一个是可以拥有多个用户的组。 这是我的模式和模型,我不知道它们是否正确:
var Schema = mongoose.Schema;
var UserSchema = new Schema({
joinedGroups:[{type:Schema.Types.ObjectId, ref: 'Group'}]
}
);
var GroupSchema = new Schema({
createdBy: {type: Schema.Types.ObjectId, ref: 'User'},
joinedUsers:[{ type: Schema.Types.ObjectId, ref: 'User' }]
});
var User = mongoose.model('User',UserSchema);
var Group = mongoose.model('Group',GroupSchema);
当收到带有user._id主体的url:/ api / groups的POST时,我想将此用户加入新的创建组,此外,我想将这个新创建的组加入到用户的joinGroups和最后,我想用新用户回复新组的客户。遵循我的代码:
app.post(' / api / groups',function(req,res){ 的console.log(req.body);
var userId = req.body.user_id;
var group = {
createdBy : userId
};
Group.create(group, function(err,group){
if(err){
console.log('create group err');
res.send(err);
}
else{
console.log('create group success');
User.update({_id: userId},
{$push: {joinedGroups: group._id}},
function(err,user){
if(err){
console.log('update user err');
res.send(err);
}
else{
Group.update({_id: group._id},
{$push: {joinedUsers: user}},
function(err,group){
if(err){
console.log('update group err:' + err);
res.send(err);
}
else{
group.populate({path:'joinedUsers'},
function(err, group){
if(err){
console.log('populate group err');
res.send(err);
}
else{
console.log('populate group success');
res.json(group);
}
}
);
}
});
}
});
}
});
});
我觉得它真的很复杂,而且发生了错误:
update group err:CastError: Cast to ObjectId failed for value "1" at path "joinedUsers"
所以我希望有人帮助我做正确的解决方案,谢谢!
编辑: 我也想支持将用户加入到PUT / api / group /:group_id中的现有组中,如下所示:
var userId = req.body.user_id;
var groupId = req.params.group_id;
怎么做?谢谢!
答案 0 :(得分:0)
首先,您的实现非常复杂,可以简化为:
var userId = req.body.user_id; // this is an ObjectId
var group = {
createdBy: userId,
joinedUsers: userId
};
Group.create(group, function (err, group) {
if (err || !group) {
return res.send(err);
}
User.findById(userId, function (err, user) {
if (err || !user) {
return res.send(err);
}
user.joinedGroups.push(group._id);
user.save(function (err) {
if (err) {
return res.send(err);
}
group.populate('joinedUsers', function (err, group) {
if (err || group) {
return res.send(err);
}
res.json(group);
});
});
});
});
您收到CastError
错误的原因是:如果成功更新,update
方法会返回1
作为回调的第二个参数。但是,Group#joinedUsers
提交的User
引用了 <Style TargetType="{x:Type DataGridColumnHeadersPresenter}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeadersPresenter}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<ItemsPresenter />
<DataGridColumnHeader x:Name="PART_FillerColumnHeader"
Grid.Column="1"
IsHitTestVisible="False" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
。