Node.js 为所有记录更新子文档数组中的字段
当我第一次创建我的站点时,我不知道MongoDB做了区分大小写的搜索,还有很多其他的事情,我正在尝试解决这些问题 我已经更新了代码,在保存之前修改了用户输入,所以它是小写的,并且删除了额外的空格 我可以很容易地从mongo shell更新用户集合,然后我很乐意去那里,但我还有另一个集合需要更新,它看起来如下: 注册数据对象:Node.js 为所有记录更新子文档数组中的字段,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,当我第一次创建我的站点时,我不知道MongoDB做了区分大小写的搜索,还有很多其他的事情,我正在尝试解决这些问题 我已经更新了代码,在保存之前修改了用户输入,所以它是小写的,并且删除了额外的空格 我可以很容易地从mongo shell更新用户集合,然后我很乐意去那里,但我还有另一个集合需要更新,它看起来如下: 注册数据对象: { event: string, field: string, users: [string], players: [ first: string, last: s
{
event: string,
field: string,
users: [string],
players: [
first: string,
last: string,
email: string
]
}
如果可以在mongo shell中对所有注册的players.email字段进行修改并使其小写,我很乐意这样做。但我不认为是这样,而且我在mongoose(使用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);
}
});
});
};
module.exports.regUpdateAll=函数(req,res){
console.log(“更新所有注册”);
Registration.find().exec((err,reg)=>{
注册费((注册费)=>{
对于(var i=0;i{
如果(!err){
资源状态(200)。发送(响应);
}否则{
控制台日志(err);
资源状态(500)。发送(错误);
}
});
});
};
如何解决此问题?您需要从注册模型的对象调用.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
})
})
});
我明白了!这花了我一整天的时间,但我最终还是成功了。根据has_signed的值,我无法使其工作,但我可以这样做:
this.adminService.GetUnsignedWaivers()
.subscribe((data: []) => {
this.players = data;
this.players.forEach((p) => {
p.waivers =
p.waivers.map( w=> {
if(w.signatureUrl.length>0) {
w.url = w.signatureUrl;
w.message = "View Waiver";
}
return w;
});
});
this.size = this.players.length;
console.log(this.players);
});
我就是不明白为什么。哦,好吧。我没有意识到我必须单独保存每一个。我认为有一种方法可以一次性保存整个更新的对象数组。这很有效!我只需要在映射时指定reg.players中的所有其他字段,否则它不喜欢它。非常感谢。