无法更新多个文档

时间:2017-09-08 22:53:10

标签: node.js mongodb express mongoose

我尝试更新符合以下条件的所有文件。

出于某种原因,我在控制台中收到一条错误,指出alerts.save不是一个函数。

这就是我更新记录的方式。

问题是我试图更新多个文档吗?

router.route('/mark_as_read/:ownerId')
.put(function(req, res){

  var alerts = new Alerts();

  Alerts.find({owner_id: req.params.ownerId}, function(err, alerts){
    if(err)
        res.send(err);

    alerts.viewed = true;
    console.log('Alerts: ', alerts);

    alerts.save(function(err){
      if(err)
        res.send(err);
      res.json(alerts)
    });
  });
});

以下是我执行get时返回的数据示例:

  { _id: 59aed31e78fbbea611518ddf,
    message: 'Hammer Hammer at hammer@example.com',
    alert_type: 'Share',
    owner_id: '59a6e66d5ab67150837d96a8',
    __v: 0,
    viewed: false,
    date: 2017-09-05T16:38:54.437Z },
  { _id: 59aed6035fee3fa895045693,
    message: 'Paul Pataa at paul@example.com',
    alert_type: 'Share',
    owner_id: '59a6e66d5ab67150837d96a8',
    __v: 0,
    viewed: false,
    date: 2017-09-05T16:51:15.193Z },
  { _id: 59aedba6fec346aafae9121c,
    message: 'Marky Mark at marks@example.com',
    alert_type: 'Share',
    owner_id: '59a6e66d5ab67150837d96a8',
    __v: 0,
    viewed: false,
    date: 2017-09-05T17:15:18.876Z },
  { _id: 59aedc36fec346aafae91228,
    message: 'Lilly Lap at sammy@example.com',
    alert_type: 'Share',
    owner_id: '59a6e66d5ab67150837d96a8',
    __v: 0,
    viewed: false,
    date: 2017-09-05T17:17:42.951Z }

我尝试迭代警报数组,但这对我不起作用:

router.route('/mark_as_read/:ownerId')
.put(function(req, res){

  var alerts = new Alerts();

  Alerts.find({owner_id: req.params.ownerId}, function(err, alerts){
    if(err)
        res.send(err);

    for(var i=0; i < alerts.length; i++){
      alerts.viewed = true;
      alerts[i].save(function(err){
        if(err)
          console.log('Error in updating an alert');

      })
    }
  });
});

1 个答案:

答案 0 :(得分:1)

查找方法会返回一个数组,因此 alerts.save()无法正常工作。

您必须遍历数组并在数组中的每个文档上调用 save()

或者,您可以使用 findOne 代替,这将返回单个文档。