如何查询 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 lineres.json(provider.posts);
我想补充一下,我没有任何前端,我正在使用 curl 进行测试。 @杰森卡斯特
我不知道这是如何工作的req.provider.populate(...)
,除非您有一些自定义中间件预取提供程序并将该属性附加到 req 对象。查看两者的更新。
这很酷。提供者模型现在正在工作。但是后模型不返回正确答案,只返回数组的第一个成员。那很奇怪。我使用第一个模型。谢谢您的回答。 @杰森卡斯特
抱歉,我忘记清理查询了。 Post
现在应该可以工作了。
你能帮我解决这个帖子吗link以上是关于如何查询 API 以获取第三级路径的所有数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Facebook 营销 api 在单个查询中获取所有广告的见解
如何使用新 API 以编程方式获取 Hadoop 集群中所有正在运行的作业?