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

Posted

技术标签:

【中文标题】如何查询 API 以获取第三级路径的所有数据?【英文标题】:How query API to get all the data for third level of path? 【发布时间】:2015-07-03 12:11:14 【问题描述】:

这是我当前的架构:

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' ]
 );

我之前填写过帖子:

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 不工作,给我错误的答案。请如果有人可以帮助我更改此查询以更正一个。我将不胜感激。

【问题讨论】:

【参考方案1】:

鉴于您的架构和路由,我假设您有一个名为 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);
  );
);

【讨论】:

我更新了我的问题。对于以前的答案,我收到错误 TypeError: Cannot read property 'posts' of null from line res.json(provider.posts); 我想补充一下,我没有任何前端,我正在使用 curl 进行测试。 @杰森卡斯特 我不知道这是如何工作的req.provider.populate(...),除非您有一些自定义中间件预取提供程序并将该属性附加到 req 对象。查看两者的更新。 这很酷。提供者模型现在正在工作。但是后模型不返回正确答案,只返回数组的第一个成员。那很奇怪。我使用第一个模型。谢谢您的回答。 @杰森卡斯特 抱歉,我忘记清理查询了。 Post 现在应该可以工作了。 你能帮我解决这个帖子吗link

以上是关于如何查询 API 以获取第三级路径的所有数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Facebook 营销 api 在单个查询中获取所有广告的见解

如何使用新 API 以编程方式获取 Hadoop 集群中所有正在运行的作业?

如何查询postgres数据库以获取某些坐标10公里半径内的所有点

mysql如何查出父分类下面的所有子分类中的站点信息

mysql如何查出父分类下面的所有子分类中的站点信息

php mysql jquery ajax 查询数据库三级联动