嵌套Mongoose方法有可能吗?

时间:2016-10-25 18:29:54

标签: node.js mongoose

我有以下架构:

var ItemSchema = new Schema({
  name: String,
  completed: Boolean,
  priority: String,
  dueDate: String
});

var ListSchema = new Schema({
  name: String,
  items: [ItemSchema]

});

我想要了解ItemSchema的实例。我可以嵌套两个Mongoose方法来实现它,如下所示:

router.route('/lists/:list_id/items/:items_id')
   .put(function(req, res) {
       List.findById(req.params.list_id, function(err, list) {
          if (err) {
            res.send(err);
          }
          list.items.findByIdAndRemove(req.params.items_id, function(err, item) {
              if (err) {
                res.send(err);
            }
            console.log(item);
            res.json(list);
            });`

1 个答案:

答案 0 :(得分:0)

我使用.findById找到了一个更简单的问题解决方案,然后使用特殊的id方法通过_id查找文档。这并不能回答您是否可以嵌套Mongoose方法,但仍然是访问其父级中的子文档的解决方案。

Mongoose Sub Document Documentation

以下是解决方案:

router.route('/lists/:list_id/items/:items_id')
.put(function(req, res) {
    List.findById(req.params.list_id, function(err, list) {
      if (err) {
        res.send(err);
      }

      var item = list.items.id(req.params.items_id);
      item.completed = true;
      list.save(function (err, result) {
          if (err) {
              res.send(err);
          }
          res.json(result);
      })
  })
})