From 113cb85c46aa26ae5f1a752d31703eb4bb935a5e Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Wed, 4 Dec 2013 12:10:53 -0500 Subject: [PATCH] added lists to mongo --- src/database/mongo.js | 36 +++++++++++++++++++++++++++++++++--- src/routes/debug.js | 29 ++++++++++++++++++++++++++++- 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/src/database/mongo.js b/src/database/mongo.js index ae5a049fad..1e8c6ff564 100644 --- a/src/database/mongo.js +++ b/src/database/mongo.js @@ -318,15 +318,45 @@ // lists module.listPrepend = function(key, value, callback) { - throw new Error('not-implemented'); + module.isObjectField(key, 'array', function(err, exists) { + if(err) { + return callback(err); + } + if(exists) { + db.collection('objects').update({_key:key}, {'$set': {'array.-1': value}}, {upsert:true, w:1 }, function(err, result) { + callback(err, result); + }); + } else { + module.listAppend(key, value, callback); + } + + }) } module.listAppend = function(key, value, callback) { - throw new Error('not-implemented'); + db.collection('objects').update({ _key: key }, { $push: { array: value } }, {upsert:true, w:1}, function(err, result) { + callback(err, result); + }); } module.getListRange = function(key, start, stop, callback) { - throw new Error('not-implemented'); + + if(stop === -1) { + // mongo doesnt allow -1 as the count argument in slice + // pass in a large value to retrieve the whole array + stop = Math.pow(2, 31) - 2; + } + + db.collection('objects').findOne({_key:key}, { array: { $slice: [start, stop - start + 1] }}, function(err, data) { + if(err) { + return callback(err); + } + if(data && data.array) { + callback(err, data.array); + } else { + callback(err, []); + } + }); } diff --git a/src/routes/debug.js b/src/routes/debug.js index 72391b0aa8..d59a922f18 100644 --- a/src/routes/debug.js +++ b/src/routes/debug.js @@ -183,6 +183,28 @@ var DebugRoute = function(app) { });*/ } + function listAppend(callback) { + db.listAppend('myList5', 5, function(err, data) { + console.log('listAppend return', data); + callback(err, {'listAppend': data}); + }); + } + + function listPrepend(callback) { + db.listPrepend('myList5', 4, function(err, data) { + console.log('listPrepend return', data); + callback(err, {'listPrepend': data}); + }); + } + + function getListRange(callback) { + db.getListRange('myList5', 0, 5, function(err, data) { + console.log('getListRange return', data); + callback(err, {'getListRange': data}); + }); + } + + var objectTasks = [ //createUser, getUser, @@ -211,8 +233,13 @@ var DebugRoute = function(app) { getSortedSetRange, ]; + var listTasks = [ + listAppend, + listPrepend, + getListRange + ]; - require('async').series(sortedSetTasks, function(err, results) { + require('async').series(listTasks, function(err, results) { if(err) { console.log(err); res.send(err.message);