Mongoose获取刚刚保存的子文档

时间:2016-06-26 06:30:00

标签: mongodb mongoose

 router.route('/')
    .post((req, res) => {
      Circle.findOne({title: req.params.circle_title}, (err, circle) => {
        if (err) {
          return res.send(err)
        }

        circle.posts.push({
          authorId: req.body.authorId,
          body: req.body.body
        })

        circle.save((err, savedCircle) => {
          if (err) {
            return res.send(err)
          }

          res.json(savedCircle.posts[savedCircle.posts.length-1]) // FIXME
        })
      })
    })

在上面的代码中,我想知道是否有更好的方法可以返回刚刚保存的post,这是circle的子文档。

1 个答案:

答案 0 :(得分:0)

您可以尝试以下操作:

保存后,您需要找到一个并填充:

circle.save((err, savedCircle) {

      if (err) {
        return res.send(err)
      }

      Circle.findOne(savedCircle).populate('post.Ref_Id').exec(function(err,    results) {
           console.log(results);
      });

      res.json(results);

    })
 }

<小时/> 即使您可以直接对结果/保存的文档进行操作。

savedCircle.populate('post.Ref_Id').exec(function(err, results) {
    console.log(results);
});

<小时/> 最好的方法是引用最近推送的对象。 e.g:

    circle.posts.push({
      authorId: req.body.authorId,
      body: req.body.body
    });
    latestSavedcirclePost = circle.posts[0]; //Here you will get _id ref as well

<小时/> 您可以尝试使用create方法,而不是将它们推送/添加到数组中,例如:

 var latestSavedcirclePost = circle.post.create({
      authorId: req.body.authorId,
      body: req.body.body
 });