Я создал цикл For, который присваивает значения пользователям в моей базе данных.
Мой код состоит из: -
Массив с именем Output , что-то вроде этого;
{['Number': '907384719', 'amount': 23],
['Number': '907118281', 'amount': 50]}
Затем я создал цикл for, который извлекает число и количество значений из массива output ;
var getLength = output.length;
for (var i = 0; i < output.length; i++) {
numbers = output[i].number;
amount1 = output[i].amount;
}
В моем приложении я сделал запрос в коллекцию данных пользователя, чтобы извлечь ID пользователей, чьи номера указаны в приведенном выше массиве output .
var query = { number: numbers };
db.collection("accounts").find(query).toArray(function(err, result, from, to) {
if (err) throw err;
for (i = 0; i < result.length; i++) {
id = result[i]._id;
После получения идентификаторов пользователей я хотел увеличить их баланс с помощью
количество значений, перечисленных в массиве output ;
balance.findOneAndUpdate({
userId: getObjectId(id)
}, {
$inc: {
balance: parseInt(amount1)
}
}, async function(err, res) {
if (err) {
return callback(err)
} else {
callback(null, res.value.balance)
}
});
После написания этого кода я столкнулся с проблемой . Этот скрипт увеличивает баланс выбранных пользователей, но он увеличивается с неправильными значениями сумму .
Цикл for увеличивает только баланс с первым значением amount в выходном массиве. Например, используя приведенный выше массив, скрипт увеличивает баланс каждого пользователя на 23 балла.
Я много чего пробовал, но, похоже, что-то блокирует мой цикл. Вот полный код, я включил некоторые комментарии, чтобы объяснить больше;
exports.findUser = function(newData, e, callback) {
// get the number and the amoount attached
var output = {
['Number': '907384719', 'amount': 23],
['Number': '907118281', 'amount': 50]
}
var getLength = output.length;
for (var i = 0; i < output.length; i++) {
numbers = output[i].number;
amount1 = output[i].amount;
//console.log(numbers); These two consoles seem to output the right data
//console.log(amount1);
var query = {
number: numbers
};
db.collection("accounts").find(query).toArray(function(err, result, from, to) {
if (err) throw err;
for (i = 0; i < result.length; i++) {
// gets the IDs of the users with their numbers are in the "output array"
id = result[i]._id;
//var amount = 500;
balance.findOneAndUpdate({
userId: getObjectId(id)
}, {
$inc: {
balance: parseInt(amount1) // only increments with 23 points
}
}, async function(err, res) {
if (err) {
return callback(err)
} else {
callback(null, res.value.balance)
}
});
//console.log(id);
//console.log(numbers); outputs only he first number
//console.log(amount1); outputs only the first amount "23"
}
});
}
}
Мой сценарий получает правильную учетную запись для приращения очков, но он увеличивается только с первым значением «суммы» в массиве. Поэтому, пожалуйста, помогите мне узнать, как я могу увеличить каждый баланс на свою сумму из массива output
.