mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-07-04 14:17:37 +02:00
sortedSetScores for tag counts
This commit is contained in:
@@ -153,6 +153,35 @@ module.exports = function(db, module) {
|
||||
});
|
||||
};
|
||||
|
||||
module.sortedSetScores = function(key, values, callback) {
|
||||
values = values.map(function(value) {
|
||||
return value ? value.toString() : value;
|
||||
});
|
||||
|
||||
module.getListRange(key, 0, -1, function(err, list) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
var map = {};
|
||||
list = list.filter(function(item) {
|
||||
return values.indexOf(item.value) !== -1;
|
||||
}).forEach(function(item) {
|
||||
map[item.value] = item.score;
|
||||
});
|
||||
|
||||
var returnData = new Array(values.length),
|
||||
score;
|
||||
|
||||
for(var i=0; i<values.length; ++i) {
|
||||
score = map[values[i]];
|
||||
returnData[i] = score ? score : null;
|
||||
}
|
||||
|
||||
callback(null, returnData);
|
||||
});
|
||||
};
|
||||
|
||||
module.isSortedSetMember = function(key, value, callback) {
|
||||
// maybe can be improved by having a parallel array
|
||||
module.getListRange(key, 0, -1, function(err, list) {
|
||||
|
||||
@@ -143,6 +143,50 @@ module.exports = function(db, module) {
|
||||
});
|
||||
};
|
||||
|
||||
module.sortedSetsScore = function(keys, value, callback) {
|
||||
value = helpers.valueToString(value);
|
||||
db.collection('objects').find({_key:{$in:keys}, value: value}).toArray(function(err, result) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
var map = helpers.toMap(result),
|
||||
returnData = [],
|
||||
item;
|
||||
|
||||
for(var i=0; i<keys.length; ++i) {
|
||||
item = map[keys[i]];
|
||||
returnData.push(item ? item.score : null);
|
||||
}
|
||||
|
||||
callback(null, returnData);
|
||||
});
|
||||
};
|
||||
|
||||
module.sortedSetScores = function(key, values, callback) {
|
||||
values = values.map(helpers.valueToString);
|
||||
db.collection('objects').find({_key: key, value: {$in: values}}).toArray(function(err, result) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
var map = {};
|
||||
result.forEach(function(item) {
|
||||
map[item.value] = item.score;
|
||||
});
|
||||
|
||||
var returnData = new Array(values.length),
|
||||
score;
|
||||
|
||||
for(var i=0; i<values.length; ++i) {
|
||||
score = map[values[i]];
|
||||
returnData[i] = score ? score : null;
|
||||
}
|
||||
|
||||
callback(null, returnData);
|
||||
});
|
||||
};
|
||||
|
||||
module.isSortedSetMember = function(key, value, callback) {
|
||||
module.sortedSetScore(key, value, function(err, score) {
|
||||
callback(err, !!score);
|
||||
@@ -167,26 +211,6 @@ module.exports = function(db, module) {
|
||||
});
|
||||
};
|
||||
|
||||
module.sortedSetsScore = function(keys, value, callback) {
|
||||
value = helpers.valueToString(value);
|
||||
db.collection('objects').find({_key:{$in:keys}, value: value}).toArray(function(err, result) {
|
||||
if(err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
var map = helpers.toMap(result),
|
||||
returnData = [],
|
||||
item;
|
||||
|
||||
for(var i=0; i<keys.length; ++i) {
|
||||
item = map[keys[i]];
|
||||
returnData.push(item ? item.score : null);
|
||||
}
|
||||
|
||||
callback(null, returnData);
|
||||
});
|
||||
};
|
||||
|
||||
module.getSortedSetUnion = function(sets, start, stop, callback) {
|
||||
getSortedSetUnion(sets, 1, start, stop, callback);
|
||||
};
|
||||
|
||||
@@ -82,6 +82,18 @@ module.exports = function(redisClient, module) {
|
||||
redisClient.zscore(key, value, callback);
|
||||
};
|
||||
|
||||
module.sortedSetsScore = function(keys, value, callback) {
|
||||
multi('zscore', keys, value, callback);
|
||||
};
|
||||
|
||||
module.sortedSetScores = function(key, values, callback) {
|
||||
var multi = redisClient.multi();
|
||||
for(var i=0; i<values.length; ++i) {
|
||||
multi.zscore(key, values[i]);
|
||||
}
|
||||
multi.exec(callback);
|
||||
};
|
||||
|
||||
module.isSortedSetMember = function(key, value, callback) {
|
||||
module.sortedSetScore(key, value, function(err, score) {
|
||||
callback(err, !!score);
|
||||
@@ -104,10 +116,6 @@ module.exports = function(redisClient, module) {
|
||||
});
|
||||
};
|
||||
|
||||
module.sortedSetsScore = function(keys, value, callback) {
|
||||
multi('zscore', keys, value, callback);
|
||||
};
|
||||
|
||||
function multi(command, keys, value, callback) {
|
||||
var m = redisClient.multi();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user