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

How query API to get all the data for third level of 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' }]
    });

这是 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 中编写一个查询,查询一个提供商的所有 post。这个 router.get 不起作用,如果有人可以帮助我更改此查询以更正一个,请返回我错误的 answer.Please。我将不胜感激。

根据您的架构和路由,我假设您有一个名为 Provider 的模型,它使用所示的架构,并且 URL 中的 :provider 是所请求提供程序的 ID。如果是这样,你可以使用 findById. Also, since you are using an array of references you will need to populate 他们,如果你想要除他们的 ID 以外的任何东西:

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);
  });
});