mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-02-18 20:47:33 +01: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();
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user