查询API如何获取第三级path的所有数据?

这是目前的架构,我有:

var Schema = mongoose.Schema; var ProviderSchema = new Schema({ name: String, abbreviated: String, services: Array, locations: Array, description: String, url: String, upvotes:{type:Number, default:0}, createdOn: { type: Date, default: Date.now}, posts:[{ type: mongoose.Schema.Types.ObjectId, ref: 'Post' }] }); 

这是后架构:

 var PostSchema = new mongoose.Schema({ title: String, body: String, upvotes: {type: Number, default:0}, author: String, provider: { type: mongoose.Schema.Types.ObjectId, ref: 'Provider' }, comments:[{ type: mongoose.Schema.Types.ObjectId, ref: 'Comment' }] }); 

我在之前填写的post:

 router.get('/providers/:provider', function(req, res) { req.provider.populate('posts', function(err, provider) { res.json(provider); }); }); 

这就是我在我的API中:

 router.get('/providers/:provider/posts', function(req, res) { Post.find(function(err, post){ if(err){ return next(err); } res.json(post); }); }); 

我想编写一个查询API查询一个提供者的所有职位。 这个router.get不工作,给我错误的答案。请如果有人可以帮助我改变这个查询来纠正一个。 我将不胜感激。

鉴于你的模式和路线,我假设你有一个叫做Provider的模型,它使用显示的模式,并且:provider URL中的:provider是被请求提供者的ID。 如果是这样你可以使用findById 。 另外,由于您使用的是引用数组,因此如果您需要除ID以外的任何内容,则需要populate它们:

 router.get('/providers/:provider/posts', function(req, res) { Provider.findById(req.params.provider).select('posts').populate('posts').exec(function(err, provider) { if(err){ return next(err); } res.json(provider.posts); }); }); 

否则,如果您尝试使用Post模型,则需要显示该模式。

更新:使用你的Post模型:

 router.get('/providers/:provider/posts', function(req, res) { Post.find({provider: req.params.provider}, function(err, posts) { if(err){ return next(err); } res.json(posts); }); });