更新所有记录的子文档数组中的字段

姆卡迪奥

最初创建站点时,我不知道MongoDB会进行区分大小写的搜索等等,而且我正在尝试解决问题。

我已经更新了代码以在保存之前更改用户输入,以便将其小写并修剪多余的空格。

我可以很容易地从mongo shell中更新用户集合,然后很高兴去那里,但是我还有另一个需要更新的集合,它看起来像这样:

注册数据对象:

{
event: string,
field: string,
users: [string],
players: [
  first: string,
  last: string,
  email: string
]
}

如果可以通过修整并从mongo shell使其小写的方式来更新所有注册的players.email字段,我很乐意这样做。但是我不认为这是事实,而且在猫鼬(使用Node.js后端,AngularJS前端)中遇到了麻烦。

我在想类似的东西,但出现类型错误:Registration.save不是一个函数:

module.exports.regUpdateAll = function(req, res) {
  console.log('UPDATE ALL REGISTRATIONS');
    Registration.find().exec((err, reg) => {
      reg.forEach((reg) => {
        for(var i = 0; i < reg.players.length; i++) { 
          reg.players[i].email = reg.players[i].email.toLowerCase().trim(); 
        }
      });
      console.log(reg);
      Registration.save(reg).then((err, response) => {
        if(!err) {
          res.status(200).send(response);
        } else {
          console.log(err);
          res.status(500).send(err);
        }
      });
    });     
};

我该如何解决这个问题?

黎安迪

您需要从注册模型的对象调用.save()。例如

Registration.find().exec((err, regtrations) => {
    regtrations.forEach((reg) => {
        reg.players =
            reg.players.map( p=> {
                p.email = p.email.toLowerCase().trim();
                return p;
            })

        console.log(reg);
        reg.markModified("players");
        reg.save( (error)=> { 
            //do something
        })
    })
  });

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章