From 7aa937a657e7c6aed52a30322efc978f4dec77dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Sun, 28 Oct 2018 16:20:38 -0400 Subject: [PATCH] remove dupe code in mongodb sorted --- src/database/mongo/sorted.js | 79 ++++++++++++------------------------ test/database/sorted.js | 11 +++++ 2 files changed, 37 insertions(+), 53 deletions(-) diff --git a/src/database/mongo/sorted.js b/src/database/mongo/sorted.js index 9ec82f5a68..b0ef51aaee 100644 --- a/src/database/mongo/sorted.js +++ b/src/database/mongo/sorted.js @@ -12,37 +12,46 @@ module.exports = function (db, module) { require('./sorted/intersect')(db, module); module.getSortedSetRange = function (key, start, stop, callback) { - getSortedSetRange(key, start, stop, 1, false, callback); + getSortedSetRange(key, start, stop, '-inf', '+inf', 1, false, callback); }; module.getSortedSetRevRange = function (key, start, stop, callback) { - getSortedSetRange(key, start, stop, -1, false, callback); + getSortedSetRange(key, start, stop, '-inf', '+inf', -1, false, callback); }; module.getSortedSetRangeWithScores = function (key, start, stop, callback) { - getSortedSetRange(key, start, stop, 1, true, callback); + getSortedSetRange(key, start, stop, '-inf', '+inf', 1, true, callback); }; module.getSortedSetRevRangeWithScores = function (key, start, stop, callback) { - getSortedSetRange(key, start, stop, -1, true, callback); + getSortedSetRange(key, start, stop, '-inf', '+inf', -1, true, callback); }; - function getSortedSetRange(key, start, stop, sort, withScores, callback) { + function getSortedSetRange(key, start, stop, min, max, sort, withScores, callback) { if (!key) { return callback(); } - - var fields = { _id: 0, _key: 0 }; - if (!withScores) { - fields.score = 0; + if (start < 0 && start > stop) { + return callback(null, []); } if (Array.isArray(key)) { key = { $in: key }; } - if (start < 0 && start > stop) { - return callback(null, []); + var query = { _key: key }; + + if (min !== '-inf') { + query.score = { $gte: min }; + } + if (max !== '+inf') { + query.score = query.score || {}; + query.score.$lte = max; + } + + const fields = { _id: 0, _key: 0 }; + if (!withScores) { + fields.score = 0; } var reverse = false; @@ -62,10 +71,10 @@ module.exports = function (db, module) { limit = 0; } - db.collection('objects').find({ _key: key }, { projection: fields }) - .limit(limit) - .skip(start) + db.collection('objects').find(query, { projection: fields }) .sort({ score: sort }) + .skip(start) + .limit(limit) .toArray(function (err, data) { if (err || !data) { return callback(err); @@ -75,9 +84,7 @@ module.exports = function (db, module) { data.reverse(); } if (!withScores) { - data = data.map(function (item) { - return item.value; - }); + data = data.map(item => item.value); } callback(null, data); @@ -101,45 +108,11 @@ module.exports = function (db, module) { }; function getSortedSetRangeByScore(key, start, count, min, max, sort, withScores, callback) { - if (!key) { - return callback(); - } if (parseInt(count, 10) === -1) { count = 0; } - - var query = { _key: key }; - - if (min !== '-inf') { - query.score = { $gte: min }; - } - if (max !== '+inf') { - query.score = query.score || {}; - query.score.$lte = max; - } - - var fields = { _id: 0, _key: 0 }; - if (!withScores) { - fields.score = 0; - } - - db.collection('objects').find(query, { projection: fields }) - .limit(count) - .skip(start) - .sort({ score: sort }) - .toArray(function (err, data) { - if (err) { - return callback(err); - } - - if (!withScores) { - data = data.map(function (item) { - return item.value; - }); - } - - callback(err, data); - }); + var stop = start + count - 1; + getSortedSetRange(key, start, stop, min, max, sort, withScores, callback); } module.sortedSetCount = function (key, min, max, callback) { diff --git a/test/database/sorted.js b/test/database/sorted.js index ab6ba95652..4fd10e63a6 100644 --- a/test/database/sorted.js +++ b/test/database/sorted.js @@ -201,6 +201,17 @@ describe('Sorted Set methods', function () { done(); }); }); + + it('should return elements from 3 to last', function (done) { + db.sortedSetAdd('partialZset', [1, 2, 3, 4, 5], ['value1', 'value2', 'value3', 'value4', 'value5'], function (err) { + assert.ifError(err); + db.getSortedSetRangeByScore('partialZset', 3, 10, '-inf', '+inf', function (err, data) { + assert.ifError(err); + assert.deepStrictEqual(data, ['value4', 'value5']); + done(); + }); + }); + }); }); describe('getSortedSetRevRangeByScore()', function () {