这是我的用户模型:
const userSchema = new Schema({
name: String,
email: {type: String, unique: true},
password: String,
verified: Boolean,
profile: {
avatar: String,
name: String,
lai: String,
actions: Number,
points: Number
}
}
我正在尝试更新多个用户的个人资料属性,因为您可以看到每个个人资料对用户来说都是唯一的。
const User = require('../models/user');
const mongoose = require('mongoose');
function updateUsers(){
let array = {};
User.find({}, function(err, users) {
users.forEach(function(user) {
let updated = {
"avatar" :
"",
"name" : user.name,
"lai" : "",
"actions" : 0,
"points" : 0
};
array[user._id] = updated;
});
userUpdate(array);
});
}
所以我能够将_ids和新的配置文件对象保存到数组中。
function userUpdate(array){
console.log(array);
for (i in array){
console.log("id is: " + i);
console.log(array[i]);
User.update({_id: i}, {$set: {profile: array[i]}});
console.log("after call");
}
}
但上述更新调用不会更新数据库中的用户。它基本上什么都不做,不会抛出任何错误。我尝试将id转换为objectId,将$ set调用更改为其他内容,或者将update更改为findByIdAndUpdate,但没有任何效果。我在这里做错了什么?
编辑:我解决了这个问题。似乎更新调用需要与promises一起使用。我在下面添加了声明并且它正常工作。喔!User.findByIdAndUpdate({_id: i}, {$set: {profile: array[i]}})
.then(() => User.findById({_id: i}))
.catch();