我正在尝试找到一种有效的方法来更新多个用户的分数。 所以这就是我得到的:
family.users.map
正在映射低谷用户
Core.userDetails
正在获得用户真实属性。
如果来自userDetails
的得分不等于Currentuser
,则将新得分推入datastorage
变量。
完成所有操作(Promise.all
之后,我需要更新属性,但是如何确保在正确的用户ID中更新分数?
代码段:
var DataTostore = [];
var familyPromises = family.users.map(function (CurrentUser) {
return Core.userDetails(CurrentUser.userid).then(function (UserData) {
if (UserData.score != CurrentUser.score) {
/*
Score not equal. need to update the users score.
*/
DataTostore.push({score: UserData.score})
} else {
return true;
}
});
});
return Promise.all(familyPromises).then(function (xx) {
return family.updateMany({_id: family.id},{UPDATE SCORES WITH RIGHT USERIDS})
});
数据库架构:
users: [
{
userid: {type: String, default: 'noid'},
joined_date: {type: Number, default: 0},
permission: {type: Number, default: 0},
upgrade: {type: Number, default: 0},
score: {type: Number, default: 0},
},
],
我该怎么做?
更新:
我想更新score
上的所有新数据,而不是单独进行:
Family.updateOne({_id: id, "users.userid" : userData._id },{$set: "users.score" : UserData.score});
我可能正在上面的查询中,并且做类似的事情:
var DataTostore = [];
var familyPromises = family.users.map(function (CurrentUser) {
return Core.userDetails(CurrentUser.userid).then(function (UserData) {
if (UserData.score != CurrentUser.score) {
/*
Score not equal. need to update the users score.
*/
Family.updateOne({_id: id, "users.userid" : userData._id },{$set: "users.score" : UserData.score});
} else {
return true;
}
});
});
return Promise.all(familyPromises).then(function (xx) {
});
但这似乎不是更新多个文档的有效方法。我想要一种将所需数据存储在DataToStore
中并立即更新所有数据的方法。