首页 > 解决方案 > 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

标签: node.jsmongoosepopulate

解决方案


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。


推荐阅读