我在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 });
})
})
}
如何在没有模型验证的情况下从模型中获取当前数据?
答案 0 :(得分:1)
我认为您应该还原address
和phone
模式,并使用如下的新Object模式创建临时字段(例如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];
完成此操作后,您可以使用对象架构重写address
和phone
字段,复制tmpAddress-> address和tmpPhone-> phone,并删除tmpAddress和tmpPhone字段。
希望有帮助。