无法更新多个文档

13 浏览
0 Comments

无法更新多个文档

我正在尝试更新符合以下条件的所有文档。\n出于某种原因,控制台出现了一个错误,提示 alerts.save 不是一个函数。\n以下是我更新记录的方法。\n问题是我尝试更新多个文档吗?\n

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)
    });
  });
});

\n这是一个我进行GET请求时返回的数据示例:\n

  { _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 }

\n我尝试遍历 alerts 数组,但对我来说不起作用:\n

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');
      })
    }
  });
});

0
0 Comments

问题的原因是:在给定的代码中,使用了alerts.save()来保存多个文档,但是find方法返回的是一个数组,所以无法直接将alerts.save()应用于整个数组。

解决方法是:需要对数组进行迭代,对每个文档调用save()方法进行保存。或者可以使用findOne方法,它会返回一个单个文档。

但是,使用findOnefindById方法可能无法满足更新所有具有相同owner_id的文档的需求。可以尝试使用Alerts.update({owner_id: req.params.ownerId}, {viewed: true}, {multi: true}, function(err, numAffected) {...});来更新多个文档。其中,multi选项需要设置为true,以更新多个文档。

通过上述的解决方法,问题得到了解决,并且在文档中找到了相关的解释和示例,感谢Steve的帮助。

0