sortedSetScores for tag counts

v1.18.x
barisusakli 11 years ago
parent e10eaf0d50
commit cd096f8832

@ -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();

@ -104,14 +104,12 @@ module.exports = function(Topics) {
}
var uniqueTags = _.uniq(_.flatten(members));
var tagTopicSets = uniqueTags.map(function(tag) {
return 'tag:' + tag + ':topics';
});
db.sortedSetsCard(tagTopicSets, function(err, data) {
db.sortedSetScores('tags:topic:count', uniqueTags, function(err, data) {
if (err) {
return callback(err);
}
var tagCounts = _.object(uniqueTags, data);
members.forEach(function(tags, index) {

Loading…
Cancel
Save