feat: allow multiple scores in sortedSetsAdd

This commit is contained in:
Baris Usakli
2019-05-31 15:44:50 -04:00
parent 868dedd194
commit 31ccc860d3
4 changed files with 50 additions and 14 deletions

View File

@@ -50,20 +50,26 @@ module.exports = function (db, module) {
});
}
module.sortedSetsAdd = function (keys, score, value, callback) {
module.sortedSetsAdd = function (keys, scores, value, callback) {
callback = callback || helpers.noop;
if (!Array.isArray(keys) || !keys.length) {
return callback();
return setImmediate(callback);
}
if (!utils.isNumber(score)) {
return setImmediate(callback, new Error('[[error:invalid-score, ' + score + ']]'));
const isArrayOfScores = Array.isArray(scores);
if (!isArrayOfScores && !utils.isNumber(scores)) {
return setImmediate(callback, new Error('[[error:invalid-score, ' + scores + ']]'));
}
if (isArrayOfScores && scores.length !== keys.length) {
return setImmediate(callback, new Error('[[error:invalid-data]]'));
}
value = helpers.valueToString(value);
var bulk = db.collection('objects').initializeUnorderedBulkOp();
for (var i = 0; i < keys.length; i += 1) {
bulk.find({ _key: keys[i], value: value }).upsert().updateOne({ $set: { score: parseFloat(score) } });
bulk.find({ _key: keys[i], value: value }).upsert().updateOne({ $set: { score: parseFloat(isArrayOfScores ? scores[i] : scores) } });
}
bulk.execute(function (err) {