node.js - Mongoose 获取当前数据,即使它对模型无效
问题描述
我更改了 User.model 中的两个属性:
address: [
{
street: String,
number: Number,
city: String,
country: String
}],
phone: [
{
landLine: String,
mobilePhone: String
}]
只对一个对象:
address:{
street: String,
number: Number,
city: String,
country: String
},
phone:{
landLine: String,
mobilePhone: String
}
但是,仍然有一些用户在其上持有一个数组。所以我创建了一个脚本来更新这些用户,但是在使用时User.find({})
,电话和地址属性是undefined
. 我想那是因为当前模型无效。
由于user.address
和user.phone
都是undefined
,因此数据对象将仅包含 2 个空对象电话和地址,这导致用户没有地址和电话。
这是我用于获取和更新用户的代码:
function updateUser(id, data){
return new Promise( (resolve, reject) =>{
User.findByIdAndUpdate(
{_id: id},
{
$set: data
}
).exec( (err, res) => {
if(err) return reject(err);
return resolve();
})
})
}
module.exports.updateUsers = (req, res) => {
Users.find({}).exec( (err, users) => {
//For testing, update only 1 user
//User.find({username: 'some@emailaddress'}).exec( (err, users) => {
if(err) return res.status(500).json({message: "Error getting users"})
return blueBird.mapSeries(users, (user) => {
let data = {
address: {},
phone: {}
}
if(user.address && user.address.length > 0){
data.address = user.address[0];
}
if(user.phone && user.phone.length > 0){
data.phone = user.phone[0];
}
return updateUser(user._id, data);
})
.then(() => {
return res.status(200).json({ status: true, message: "Users are updated" });
})
.catch((e) => {
return res.status(500).json({ status: false, message: "Some error occured while code execute.", error: e });
})
})
}
如何在没有模型验证的情况下从模型中获取当前数据?
解决方案
我认为你应该恢复你的address
和模式,并使用你的新对象模式phone
创建临时字段(如tmpAddress
和),如下所示:tmpPhone
address: [{
street: String,
number: Number,
city: String,
country: String
}],
phone: [{
landLine: String,
mobilePhone: String
}],
tmpAddress: {
street: String,
number: Number,
city: String,
country: String
},
tmpPhone: {
landLine: String,
mobilePhone: String
}
然后你像这样保存你的新字段:
data.tmpAddress = user.address[0];
data.tmpPhone = user.phone[0];
完成后,您可以使用 Object Schema 重写您的address
和phone
字段,复制 tmpAddress -> address 和 tmpPhone -> phone,并删除 tmpAddress 和 tmpPhone 字段。
希望能帮助到你。
推荐阅读
- python - PyCharm中带有张量流的退出代码-1073741571(0xC0000FD)
- javascript - 错误回购github:找不到角度![jspm 安装]
- jmeter - 如何在分布式性能测试中验证 JMeter 的性能?
- list - Haskell - 总结列表的前 n 个元素
- arrays - 在 Swift 中将两个数组转换为字典
- sql-server - 内部带有 CASE 语句的用户定义函数
- ruby-on-rails - Ruby:将数据结构转换为 Excel 工作表
- javascript - 单击按钮时填写必填字段
- git-checkout - git --git-dir checkout 和 git checkout 的区别
- java - 如何杀死在后台运行的线程 - Java?