fixed mongo setAdd and setRemove to accept arrays like redis, fixed infinite scroll for mongo

v1.18.x
Baris Soner Usakli 11 years ago
parent 15f19653c5
commit ae93c372ff

@ -20,6 +20,7 @@
module.init = function(callback) { module.init = function(callback) {
mongoClient.connect('mongodb://'+ nconf.get('mongo:host') + ':' + nconf.get('mongo:port') + '/' + nconf.get('mongo:database'), function(err, _db) { mongoClient.connect('mongodb://'+ nconf.get('mongo:host') + ':' + nconf.get('mongo:port') + '/' + nconf.get('mongo:database'), function(err, _db) {
if(err) { if(err) {
winston.error("NodeBB could not connect to your Mongo database. Mongo returned the following error: " + err.message); winston.error("NodeBB could not connect to your Mongo database. Mongo returned the following error: " + err.message);
@ -424,10 +425,23 @@
// sets // sets
module.setAdd = function(key, value, callback) { module.setAdd = function(key, value, callback) {
if(value !== null && value !== undefined) { if(!Array.isArray(value)) {
value = value.toString(); value = [value];
} }
db.collection('objects').update({_key:key}, {$addToSet: { members: value }}, {upsert:true, w: 1}, function(err, result) {
value.forEach(function(element, index, array) {
array[index] = element ? element.toString() : element;
});
db.collection('objects').update({_key:key},
{
$addToSet: { members: { $each: value } }
},
{
upsert:true, w: 1
}
, function(err, result) {
if(typeof callback === 'function') { if(typeof callback === 'function') {
callback(err, result); callback(err, result);
} }
@ -435,10 +449,15 @@
} }
module.setRemove = function(key, value, callback) { module.setRemove = function(key, value, callback) {
if(value !== null && value !== undefined) { if(!Array.isArray(value)) {
value = value.toString(); value = [value];
} }
db.collection('objects').update({_key:key, members: value}, {$pull : {members: value}}, function(err, result) {
value.forEach(function(element, index, array) {
array[index] = element ? element.toString() : element;
});
db.collection('objects').update( { _key: key }, { $pullAll: { members: value } }, function(err, result) {
if(typeof callback === 'function') { if(typeof callback === 'function') {
callback(err, result); callback(err, result);
} }
@ -456,17 +475,26 @@
} }
module.isMemberOfSets = function(sets, value, callback) { module.isMemberOfSets = function(sets, value, callback) {
function iterator(set, next) {
module.isSetMember(set, value, function(err, result) {
if(err) {
return next(err);
}
next(null, result?1:0); if(value !== null && value !== undefined) {
}); value = value.toString();
} }
async.map(sets, iterator, callback); db.collection('objects').find({_key: {$in : sets}, members: value}).toArray(function(err, result) {
if(err) {
return callback(err);
}
result = result.map(function(item) {
return item._key;
});
result = sets.map(function(set) {
return result.indexOf(set) !== -1 ? 1 : 0;
});
callback(err, result);
});
} }
module.getSetMembers = function(key, callback) { module.getSetMembers = function(key, callback) {
@ -655,16 +683,18 @@
if(value !== null && value !== undefined) { if(value !== null && value !== undefined) {
value = value.toString(); value = value.toString();
} }
module.getSortedSetRange(key, 0, -1, function(err, result) { module.getSortedSetRevRange(key, 0, -1, function(err, result) {
if(err) { if(err) {
return callback(err); return callback(err);
} }
var rank = result.indexOf(value); var rank = result.indexOf(value);
if(rank === -1) { if(rank === -1) {
return callback(null, null); return callback(null, null);
} }
callback(null, result.length - rank - 1); callback(null, rank);
}); });
} }

@ -71,6 +71,7 @@ var fs = require('fs'),
plugins.push(meta.config['theme:id']); plugins.push(meta.config['theme:id']);
async.each(plugins, function(plugin, next) { async.each(plugins, function(plugin, next) {
if (!plugin) { if (!plugin) {
return next(); return next();
} }
@ -377,7 +378,7 @@ var fs = require('fs'),
}).filter(function(file) { }).filter(function(file) {
var stats = fs.statSync(file), var stats = fs.statSync(file),
isPlugin = file.substr(npmPluginPath.length + 1, 14) === 'nodebb-plugin-' || file.substr(npmPluginPath.length + 1, 14) === 'nodebb-widget-'; isPlugin = file.substr(npmPluginPath.length + 1, 14) === 'nodebb-plugin-' || file.substr(npmPluginPath.length + 1, 14) === 'nodebb-widget-';
if (stats.isDirectory() && isPlugin) return true; if (stats.isDirectory() && isPlugin) return true;
else return false; else return false;
}); });

Loading…
Cancel
Save