如何设置访问mongodb中嵌套对象的路径

时间:2018-03-19 19:35:26

标签: node.js database mongodb backend

我们正确设置了获取表单的路由returns something similar to this。在问题数组中,我存储了问题对象,但我无法弄清楚如何访问它们。我的代码目前看起来像:

router.route('/:post_id/:q_id')

.get(function (request, response) 
{

forms.findById(request.params.post_id,function(error,form) 
{
    if (error) 
    {
        response.send({error: error});
    }
   else 
   {
        for (var i in form.questions)
        {
            if (form.questions[i] == request.params.q_id)
            {
                questions = form.questions[i];
                response.json({singleQuestion: questions});
            }
        }     
    }    
});
})

这将返回this

我想知道如何获取对象并读取对象中的字段。

1 个答案:

答案 0 :(得分:0)

看起来您正在尝试执行以下操作:

router.get('/:formId/:questionId', (req, res) => {
  Form.findOne({
    _id: req.params.formId,
    questions: req.params.questionId
  }).populate('questions').then(form => {
   if (!form) {
      return res.status(404).json({error: 'Form not found'});
   };
   res.json({
      singleQuestion: form.questions.find(q => q._id.toString() == req.params.questionId)
   });
  }).catch(err => res.status(500).json({error: 'Internal error'}));
});

但是,似乎这条路线设置为检索给定表单的问题对象。对表单“获取”请求进行以下修改可能更为明智:

router.get('/form/:formId', (req, res) => {
  Form.findById(req.params.formId).populate('questions').exec((err, data) => {
    if (err || !data) {
      res.status(404).json({error: 'Form not found'});
    } else {
      res.json({data});
    }
  });
});

看看mongoose's docs for populate - 基本上,它会将问题对象交换为问题对象本身。将其视为应用程序端连接。