猫鼬获取当前数据,即使它对模型无效



我在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.addressuser.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 });
})
})
} 

如何在不进行模型验证的情况下从模型中获取当前数据?

我认为您应该恢复addressphone架构,并使用新的对象模式创建临时字段(如tmpAddresstmpPhone(,如下所示:

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];

完成此操作后,您可以使用对象架构重写addressphone字段,复制 tmpAddress -> 地址和 tmpPhone -> 电话,并删除 tmpAddress 和 tmpPhone 字段。

希望对您有所帮助。

最新更新