gpt4 book ai didi

javascript - 平均堆栈 : How to create routes for nested relationships?

转载 作者:行者123 更新时间:2023-12-03 07:40:12 25 4
gpt4 key购买 nike

我有两个模型“用户”和“计划”。用户有很多计划,因此在我的 Mongoose 计划计划中,我嵌入了如下的 userID。

var PlanSchema = new mongoose.Schema({
title: {type: String},
userId: {type: String},
spots:[{
name: {type: String},
category: {type: String},
address: {type: String},
hours: {type: String},
phone: {type: String},
website: {type: String},
notes: {type: String},
imageUrl: {type: String},
dayNumber: {type: Number}
}]
});

我在不同的文件(users.js 和plans.js)中有两个单独的 Controller ,处理用户和计划(/api/users 和/api/plans)的 api 路由。

如果我有特定用户的用户 ID,我正在努力弄清楚如何找到该用户的计划。

我应该在用户 Controller 中创建路线/api/users/:id/plans 还是有办法在plans.js Controller 中创建搜索路线,如/api/plans/search?=

或者有其他方法吗?

这是我的计划 Controller 代码:

计划

// Routes
PlansController.get('/', function(req, res){
Plan.find({}, function(err, plans){
res.json(plans);
});
});

PlansController.get('/:id', function(req, res){
Plan.findOne({_id: req.params.id}, function(err, plan){
res.json(plan);
});
});



PlansController.delete('/:id', function(req, res){
var id = req.params.id;
Plan.findByIdAndRemove(id, function(){
res.json({status: 202, message: 'Success'});
});
});

PlansController.post('/', function(req, res){
var plan = new Plan(req.body);
plan.save(function(){
res.json(plan);
});
});

PlansController.patch('/:id', function(req, res){
Plan.findByIdAndUpdate(req.params.id, req.body, {new: true}, function(err, updatedPlan){
res.json(updatedPlan);
});
});

不确定什么是最好的方法。非常感谢一些意见。

最佳答案

1)如果您想创建此路径“/api/users/:id/plans”,那么您需要将计划数组嵌入到用户模式中,如下所示 -

var Schema = mongoose.Schema;

var UserSchema = new mongoose.Schema({
...
plans: { type: [Schema.ObjectId], ref: 'Plan' },
...
});
mongoose.model('User', UserSchema);

现在您可以通过运行此查询轻松地从计划模型填充计划 -

User.findOne({ _id: userId})
.populate('plans')
.exec(function(err, user){
//do stuff
});

如果用户可以拥有的计划数量不是无限的,那么您可以使用它,因为 mongodb 文档的大小限制为 16 MB,并且超出范围的数组不应包含在架构中。

2) 要使用“/api/plans/search?userid=”,您需要将 userId 存储在计划架构中。您应该按照如下所述对架构进行一些更改。

 var PlanSchema = new mongoose.Schema({
title: {type: String},
userId: { type: Schema.ObjectId, ref: 'User' },
spots:[{
name: {type: String},
category: {type: String},
address: {type: String},
hours: {type: String},
phone: {type: String},
website: {type: String},
notes: {type: String},
imageUrl: {type: String},
dayNumber: {type: Number}
}]
});

这样,将来如果您需要用户数据,您可以使用上面提到的相同方法轻松填充它,而无需运行嵌套查询。

希望有帮助。

关于javascript - 平均堆栈 : How to create routes for nested relationships?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35443350/

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