mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 11:05:54 +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