node.js - Mongoose 填充不填充数组并始终返回一个空数组
问题描述
我遇到的问题是填充查询没有将任何结果提取到数组中,它只是返回一个空数组。我有两个模型,即线程和回复。线程将有一个回复数组,该数组存储所有引用回复模型的回复。
这是我的线程模式、回复模式和模型:
var Schema = mongoose.Schema;
var threadSchema = new Schema({
_id: Schema.Types.ObjectId,
board: {type: String, required: true},
text: String,
delete_password: String,
created_on: Date,
bumped_on: Date,
reported: Boolean,
replies: [{ type: Schema.Types.ObjectId, ref: 'Reply' }]
});
var replySchema = new Schema({
thread: { type: Schema.Types.ObjectId, ref: 'Thread' },
text: String,
delete_password: String,
created_on: Date,
reported: Boolean
});
var Thread = mongoose.model('Thread', threadSchema);
var Reply = mongoose.model('Reply', replySchema);
下面是我查询线程模型的代码,该模型应列出与线程关联的所有回复。
app.route('/api/replies/:board')
.get(function(req, res) {
var board = req.params.board;
var threadId = req.query.thread_id;
Thread.findById(threadId)
.populate("replies")
.exec(function(err, data) {
if (err) return console.error(err);
console.log(data);
res.json(data);
})
})
在上面的代码中,回复总是一个空数组,但它应该填充所有回复的 id。
谁能帮我解决这个问题?我的完整代码在这里https://glitch.com/~sincere-overjoyed-cart
解决方案
app.route('/api/replies/:board')
.get(function(req, res) {
var board = req.params.board;
var threadId = req.query.thread_id;
Thread.findById(threadId)
.populate("replies")
.then( data => {
console.log(data);
res.json(data);
}).catch( err => {
return console.error(err);
});
})
})
建议:如果您没有在查询中使用板,则不应在 URL 中传递。最好直接传递 theadId。
推荐阅读
- apache-spark - 带变量的 SQL 编译语句的 SparkSQL 等效项
- wpf - 列数据模板内的复选框数据上下文问题
- javascript - 使用jquery删除动态元素
- node.js - Node Js Web socket客户端停止监听
- extjs - extjs 的日期范围选择器?
- django - Django celery beat scheduler 在亚洲/加尔各答时区不起作用
- java - 在事件被持久化后执行副作用
- shopify - 使用 shopify 和 Liquid 在产品图片的右上角添加一个小徽标
- html - 嵌入 Facebook 视频在智能手机上播放质量低
- python - 如何强制 pytz 使用当前的标准时区?