首先,我很抱歉我的英语。
我在nodejs和mongo中遇到问题,我用这段代码创建了一个架构:
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var forumSchema = new Schema({
foro:[{
universidad:{ type: Schema.ObjectId, ref: "College"},
topics:[{
usercreator:{type:Schema.ObjectId, ref:"User"},
titulo:{ type: String },
posts:[{
mensaje:{ type: String },
username:{type:Schema.ObjectId, ref: "User"}
}]
}]
}]
});
module.exports = mongoose.model('Forum', forumSchema);
我已经创建了一个Json,我已将其导入mongo:
{
"_id": {"$oid":"567895dd239410651a8e4df8"},
"foro":[
{
"universidad":"566b279b747cfb38bc2830df",
"topics":[
{
"usercreator": "566df8c2c7d87f1a47fda4e7",
"titulo": "parking cercano",
"posts": [
{
"mensaje": "hay parking cerca de la uni?",
"username": "566df8c2c7d87f1a47fda4e7"
},
{
"mensaje": "si, tiene uno grande justo al lado",
"username": "566df8c2c7d87f1a47fda4e5"
}
]
},
{
"usercreator":"566df8c2c7d87f1a47fda4e5",
"titulo":"horario",
"posts":[
{
"mensaje":"solo hay horario de mañana?",
"username":"566df8c2c7d87f1a47fda4e5"
},
{
"mensaje":"no, también de tardes",
"username":"566df8c2c7d87f1a47fda4e7"
}
]
}
]
}
]
}
问题是,当我在POSTMAN中尝试获取它时,我收到一个空的json,如:[]。
控制器的代码是:
var mongoose = require('mongoose');
var Forum = mongoose.model('Forum');
var College = mongoose.model('College');
var User = mongoose.model('User');
//GET - Return all forum
exports.AllForum = function(req, res) {
console.log('all forum');
Forum.find(function(err, forum) {
User.populate(forum, {path:"User", select:"username"},function(err, forum){});
College.populate(forum, {path:"College", select:"college"},function(err, forum) {});
if (err) res.send(500, err.message);
console.log('GET /forum' + JSON.stringify(forum));
res.status(200).jsonp(forum);
});
};
控制台返回Log“all forum”,因此代码正在执行,但我不知道为什么不起作用。
有谁知道吗?谢谢!
PD:我可以在mongo中使用命令行看到完整的json。
答案 0 :(得分:0)
jsonp当你从邮递员那里请求时,这个人会期待一个回调。
将其替换为res.status(200).json(forum);
答案 1 :(得分:0)
尝试将空查询对象传递给 Forum.find 操作。看起来您尝试在每个返回的论坛文档中填充一些字段,因此请尝试链接 .populate 。
exports.AllForum = function(req, res) {
console.log('all forum');
Forum.find({})
.populate('foro.universidad', 'field1 field2')
.populate('foro.topics.usercreator', 'field1 field2')
.populate(...)
.exec(function(err, forum) {
if (err) {return res.status(500).send(err.message);}
console.log('GET /forum' + JSON.stringify(forum));
res.status(200).jsonp(forum);
});
};