mongodb updateMany在正确的用户上用新分数更新数组对象

时间:2019-03-17 15:48:27

标签: javascript database mongodb mongoose

我正在尝试找到一种有效的方法来更新多个用户的分数。 所以这就是我得到的:

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中并立即更新所有数据的方法。

0 个答案:

没有答案