这是我现有的架构:
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无法正常工作并给我错误答案。如果有人可以帮我改变这个查询来纠正错误。我将不胜感激。
答案 0 :(得分: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);
});
});