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) {
mongoClient.connect('mongodb://'+ nconf.get('mongo:host') + ':' + nconf.get('mongo:port') + '/' + nconf.get('mongo:database'), function(err, _db) {
if(err) {
winston.error("NodeBB could not connect to your Mongo database. Mongo returned the following error: " + err.message);
@ -424,10 +425,23 @@
// sets
module.setAdd = function(key, value, callback) {
if(value !== null && value !== undefined) {
value = value.toString();
if(!Array.isArray(value)) {
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') {
callback(err, result);
}
@ -435,10 +449,15 @@
}
module.setRemove = function(key, value, callback) {
if(value !== null && value !== undefined) {
value = value.toString();
if(!Array.isArray(value)) {
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') {
callback(err, result);
}
@ -456,17 +475,26 @@
}
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) {
@ -655,16 +683,18 @@
if(value !== null && value !== undefined) {
value = value.toString();
}
module.getSortedSetRange(key, 0, -1, function(err, result) {
module.getSortedSetRevRange(key, 0, -1, function(err, result) {
if(err) {
return callback(err);
}
var rank = result.indexOf(value);
if(rank === -1) {
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']);
async.each(plugins, function(plugin, next) {
if (!plugin) {
return next();
}
@ -377,7 +378,7 @@ var fs = require('fs'),
}).filter(function(file) {
var stats = fs.statSync(file),
isPlugin = file.substr(npmPluginPath.length + 1, 14) === 'nodebb-plugin-' || file.substr(npmPluginPath.length + 1, 14) === 'nodebb-widget-';
if (stats.isDirectory() && isPlugin) return true;
else return false;
});

Loading…
Cancel
Save