我创建了一个For循环,用于为数据库中的用户分配值。 我的代码包括:-
一个名为 Output 的数组,类似于这样;
{['Number': '907384719', 'amount': 23],
['Number': '907118281', 'amount': 50]}
然后,我创建了一个for循环,用于从 output 数组中提取 number 和 amount 值;
var getLength = output.length;
for (var i = 0; i < output.length; i++) {
numbers = output[i].number;
amount1 = output[i].amount;
}
在我的应用中,我对用户的数据集合进行了查询,以提取其ID列在上述 output 数组中的用户ID。
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;
获取用户ID后,我想使用 输出数组中列出的金额值;
balance.findOneAndUpdate({
userId: getObjectId(id)
}, {
$inc: {
balance: parseInt(amount1)
}
}, async function(err, res) {
if (err) {
return callback(err)
} else {
callback(null, res.value.balance)
}
});
写完此代码后, 我遇到了问题 。该脚本会增加所选用户的余额,但是会以错误的 amount 值来递增。
for循环仅使用输出数组中的第一个“ 金额”值来增加余额。例如,通过使用上述数组,脚本将每个用户的余额增加23点。
我尝试了很多事情,但是似乎有些东西阻塞了我的For Loop。这是完整的代码,我包括一些注释以解释更多信息;
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
数组中增加每个余额的余额。
答案 0 :(得分:0)
在两个for循环(变量i)中都使用相同的for var
,您需要更改第二个变量,以便遍历所有数组:
db.collection("accounts").find(query).toArray(function(err, result, from, to) {
if (err) throw err;
for (var j = 0; j < result.length; j++) {
//rest of your code