Files
NodeBB/src/database/mongo/list.js

103 lines
2.4 KiB
JavaScript
Raw Normal View History

2014-04-11 15:44:53 -04:00
"use strict";
module.exports = function (db, module) {
2014-04-11 15:44:53 -04:00
var helpers = module.helpers.mongo;
module.listPrepend = function (key, value, callback) {
2014-09-21 13:30:20 -04:00
callback = callback || helpers.noop;
if (!key) {
return callback();
}
2014-04-11 15:44:53 -04:00
value = helpers.valueToString(value);
module.isObjectField(key, 'array', function (err, exists) {
2014-07-29 17:12:02 -04:00
if (err) {
return callback(err);
2014-04-11 15:44:53 -04:00
}
2014-07-29 17:12:02 -04:00
if (exists) {
2017-02-18 01:27:46 -07:00
db.collection('objects').update({_key: key}, {$push: {array: {$each: [value], $position: 0}}}, {upsert: true, w: 1 }, function (err, res) {
2014-12-29 16:20:35 -05:00
callback(err);
});
2014-04-11 15:44:53 -04:00
} else {
module.listAppend(key, value, callback);
}
});
};
module.listAppend = function (key, value, callback) {
2014-09-03 01:13:28 -04:00
callback = callback || helpers.noop;
2014-09-21 13:30:20 -04:00
if (!key) {
return callback();
}
2014-04-11 15:44:53 -04:00
value = helpers.valueToString(value);
2017-02-18 01:27:46 -07:00
db.collection('objects').update({ _key: key }, { $push: { array: value } }, {upsert: true, w: 1}, function (err, res) {
2014-12-29 16:20:35 -05:00
callback(err);
});
2014-04-11 15:44:53 -04:00
};
module.listRemoveLast = function (key, callback) {
2014-09-21 13:30:20 -04:00
callback = callback || helpers.noop;
if (!key) {
return callback();
}
module.getListRange(key, -1, -1, function (err, value) {
2014-07-29 02:37:33 -04:00
if (err) {
return callback(err);
2014-04-11 15:44:53 -04:00
}
db.collection('objects').update({_key: key }, { $pop: { array: 1 } }, function (err, result) {
2014-07-29 02:37:33 -04:00
callback(err, (value && value.length) ? value[0] : null);
2014-04-11 15:44:53 -04:00
});
});
};
module.listRemoveAll = function (key, value, callback) {
2014-12-29 16:20:35 -05:00
callback = callback || helpers.noop;
2014-09-21 13:30:20 -04:00
if (!key) {
return callback();
}
2014-12-29 16:20:35 -05:00
value = helpers.valueToString(value);
2014-07-28 14:20:29 -04:00
db.collection('objects').update({_key: key }, { $pull: { array: value } }, function (err, res) {
2014-12-29 16:20:35 -05:00
callback(err);
2014-07-28 14:20:29 -04:00
});
};
module.listTrim = function (key, start, stop, callback) {
2014-12-29 16:20:35 -05:00
callback = callback || helpers.noop;
2014-09-21 13:30:20 -04:00
if (!key) {
return callback();
}
module.getListRange(key, start, stop, function (err, value) {
2014-12-29 16:20:35 -05:00
if (err) {
return callback(err);
}
2014-04-11 15:44:53 -04:00
db.collection('objects').update({_key: key}, {$set: {array: value}}, function (err, res) {
2014-12-29 16:20:35 -05:00
callback(err);
});
});
2014-04-11 15:44:53 -04:00
};
module.getListRange = function (key, start, stop, callback) {
2014-09-21 13:30:20 -04:00
if (!key) {
return callback();
}
2014-04-11 15:44:53 -04:00
2017-02-18 01:27:46 -07:00
db.collection('objects').findOne({_key: key}, { array: 1}, function (err, data) {
2014-04-11 15:44:53 -04:00
if(err || !(data && data.array)) {
return callback(err, []);
}
2014-12-29 17:27:42 -05:00
if (stop === -1) {
data.array = data.array.slice(start);
} else {
data.array = data.array.slice(start, stop + 1);
2014-04-11 15:44:53 -04:00
}
callback(null, data.array);
});
};
};