gpt4 book ai didi

node.js - 如何在 Mongoose 多对多关系中建模和保存?

转载 作者:太空宇宙 更新时间:2023-11-04 02:26:38 24 4
gpt4 key购买 nike

我想要两种模型,一种是可以属于多个组的用户,另一种是可以拥有多个用户的组。这是我的架构和模型,我不知道它们是否正确:

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', 函数(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;
如何做到这一点?谢谢!

最佳答案

首先,你的实现确实很复杂,可以简化如下:

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 引用。

关于node.js - 如何在 Mongoose 多对多关系中建模和保存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30010810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com