|
|
|
@ -32,9 +32,9 @@ module.exports = function (db, module) {
|
|
|
|
|
return callback();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var fields = { _id: 0, value: 1 };
|
|
|
|
|
if (withScores) {
|
|
|
|
|
fields.score = 1;
|
|
|
|
|
var fields = { _id: 0, _key: 0 };
|
|
|
|
|
if (!withScores) {
|
|
|
|
|
fields.score = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (Array.isArray(key)) {
|
|
|
|
@ -62,7 +62,7 @@ module.exports = function (db, module) {
|
|
|
|
|
limit = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
db.collection('objects').find({ _key: key }, { fields: fields })
|
|
|
|
|
db.collection('objects').find({ _key: key }, { projection: fields })
|
|
|
|
|
.limit(limit)
|
|
|
|
|
.skip(start)
|
|
|
|
|
.sort({ score: sort })
|
|
|
|
@ -70,6 +70,7 @@ module.exports = function (db, module) {
|
|
|
|
|
if (err || !data) {
|
|
|
|
|
return callback(err);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (reverse) {
|
|
|
|
|
data.reverse();
|
|
|
|
|
}
|
|
|
|
@ -117,12 +118,12 @@ module.exports = function (db, module) {
|
|
|
|
|
query.score.$lte = max;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var fields = { _id: 0, value: 1 };
|
|
|
|
|
if (withScores) {
|
|
|
|
|
fields.score = 1;
|
|
|
|
|
var fields = { _id: 0, _key: 0 };
|
|
|
|
|
if (!withScores) {
|
|
|
|
|
fields.score = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
db.collection('objects').find(query, { fields: fields })
|
|
|
|
|
db.collection('objects').find(query, { projection: fields })
|
|
|
|
|
.limit(count)
|
|
|
|
|
.skip(start)
|
|
|
|
|
.sort({ score: sort })
|
|
|
|
@ -155,7 +156,7 @@ module.exports = function (db, module) {
|
|
|
|
|
query.score.$lte = max;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
db.collection('objects').count(query, function (err, count) {
|
|
|
|
|
db.collection('objects').countDocuments(query, function (err, count) {
|
|
|
|
|
callback(err, count || 0);
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
@ -164,7 +165,7 @@ module.exports = function (db, module) {
|
|
|
|
|
if (!key) {
|
|
|
|
|
return callback(null, 0);
|
|
|
|
|
}
|
|
|
|
|
db.collection('objects').count({ _key: key }, function (err, count) {
|
|
|
|
|
db.collection('objects').countDocuments({ _key: key }, function (err, count) {
|
|
|
|
|
count = parseInt(count, 10);
|
|
|
|
|
callback(err, count || 0);
|
|
|
|
|
});
|
|
|
|
@ -220,7 +221,7 @@ module.exports = function (db, module) {
|
|
|
|
|
return callback(err, null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
db.collection('objects').count({
|
|
|
|
|
db.collection('objects').countDocuments({
|
|
|
|
|
$or: [
|
|
|
|
|
{
|
|
|
|
|
_key: key,
|
|
|
|
@ -273,7 +274,7 @@ module.exports = function (db, module) {
|
|
|
|
|
return callback(null, null);
|
|
|
|
|
}
|
|
|
|
|
value = helpers.valueToString(value);
|
|
|
|
|
db.collection('objects').findOne({ _key: key, value: value }, { fields: { _id: 0, score: 1 } }, function (err, result) {
|
|
|
|
|
db.collection('objects').findOne({ _key: key, value: value }, { projection: { _id: 0, _key: 0, value: 0 } }, function (err, result) {
|
|
|
|
|
callback(err, result ? result.score : null);
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
@ -283,7 +284,7 @@ module.exports = function (db, module) {
|
|
|
|
|
return callback();
|
|
|
|
|
}
|
|
|
|
|
value = helpers.valueToString(value);
|
|
|
|
|
db.collection('objects').find({ _key: { $in: keys }, value: value }, { _id: 0, _key: 1, score: 1 }).toArray(function (err, result) {
|
|
|
|
|
db.collection('objects').find({ _key: { $in: keys }, value: value }, { projection: { _id: 0, value: 0 } }).toArray(function (err, result) {
|
|
|
|
|
if (err) {
|
|
|
|
|
return callback(err);
|
|
|
|
|
}
|
|
|
|
@ -306,7 +307,7 @@ module.exports = function (db, module) {
|
|
|
|
|
return callback(null, null);
|
|
|
|
|
}
|
|
|
|
|
values = values.map(helpers.valueToString);
|
|
|
|
|
db.collection('objects').find({ _key: key, value: { $in: values } }, { _id: 0, value: 1, score: 1 }).toArray(function (err, result) {
|
|
|
|
|
db.collection('objects').find({ _key: key, value: { $in: values } }, { projection: { _id: 0, _key: 0 } }).toArray(function (err, result) {
|
|
|
|
|
if (err) {
|
|
|
|
|
return callback(err);
|
|
|
|
|
}
|
|
|
|
@ -333,7 +334,7 @@ module.exports = function (db, module) {
|
|
|
|
|
return callback();
|
|
|
|
|
}
|
|
|
|
|
value = helpers.valueToString(value);
|
|
|
|
|
db.collection('objects').findOne({ _key: key, value: value }, { _id: 0, value: 1 }, function (err, result) {
|
|
|
|
|
db.collection('objects').findOne({ _key: key, value: value }, { projection: { _id: 0, _key: 0, score: 0 } }, function (err, result) {
|
|
|
|
|
callback(err, !!result);
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
@ -343,17 +344,19 @@ module.exports = function (db, module) {
|
|
|
|
|
return callback();
|
|
|
|
|
}
|
|
|
|
|
values = values.map(helpers.valueToString);
|
|
|
|
|
db.collection('objects').find({ _key: key, value: { $in: values } }, { fields: { _id: 0, value: 1 } }).toArray(function (err, results) {
|
|
|
|
|
db.collection('objects').find({ _key: key, value: { $in: values } }, { projection: { _id: 0, _key: 0, score: 0 } }).toArray(function (err, results) {
|
|
|
|
|
if (err) {
|
|
|
|
|
return callback(err);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
results = results.map(function (item) {
|
|
|
|
|
return item.value;
|
|
|
|
|
var isMember = {};
|
|
|
|
|
results.forEach(function (item) {
|
|
|
|
|
if (item) {
|
|
|
|
|
isMember[item.value] = true;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
values = values.map(function (value) {
|
|
|
|
|
return results.indexOf(value) !== -1;
|
|
|
|
|
return !!isMember[value];
|
|
|
|
|
});
|
|
|
|
|
callback(null, values);
|
|
|
|
|
});
|
|
|
|
@ -364,17 +367,19 @@ module.exports = function (db, module) {
|
|
|
|
|
return callback();
|
|
|
|
|
}
|
|
|
|
|
value = helpers.valueToString(value);
|
|
|
|
|
db.collection('objects').find({ _key: { $in: keys }, value: value }, { fields: { _id: 0, _key: 1, value: 1 } }).toArray(function (err, results) {
|
|
|
|
|
db.collection('objects').find({ _key: { $in: keys }, value: value }, { projection: { _id: 0, score: 0 } }).toArray(function (err, results) {
|
|
|
|
|
if (err) {
|
|
|
|
|
return callback(err);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
results = results.map(function (item) {
|
|
|
|
|
return item._key;
|
|
|
|
|
var isMember = {};
|
|
|
|
|
results.forEach(function (item) {
|
|
|
|
|
if (item) {
|
|
|
|
|
isMember[item._key] = true;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
results = keys.map(function (key) {
|
|
|
|
|
return results.indexOf(key) !== -1;
|
|
|
|
|
return !!isMember[key];
|
|
|
|
|
});
|
|
|
|
|
callback(null, results);
|
|
|
|
|
});
|
|
|
|
@ -384,7 +389,7 @@ module.exports = function (db, module) {
|
|
|
|
|
if (!Array.isArray(keys) || !keys.length) {
|
|
|
|
|
return callback(null, []);
|
|
|
|
|
}
|
|
|
|
|
db.collection('objects').find({ _key: { $in: keys } }, { _id: 0, _key: 1, value: 1 }).sort({ score: 1 }).toArray(function (err, data) {
|
|
|
|
|
db.collection('objects').find({ _key: { $in: keys } }, { projection: { _id: 0, score: 0 } }).sort({ score: 1 }).toArray(function (err, data) {
|
|
|
|
|
if (err) {
|
|
|
|
|
return callback(err);
|
|
|
|
|
}
|
|
|
|
@ -412,7 +417,7 @@ module.exports = function (db, module) {
|
|
|
|
|
value = helpers.valueToString(value);
|
|
|
|
|
data.score = parseFloat(increment);
|
|
|
|
|
|
|
|
|
|
db.collection('objects').findAndModify({ _key: key, value: value }, {}, { $inc: data }, { new: true, upsert: true }, function (err, result) {
|
|
|
|
|
db.collection('objects').findOneAndUpdate({ _key: key, value: value }, { $inc: data }, { returnOriginal: false, upsert: true }, function (err, result) {
|
|
|
|
|
// if there is duplicate key error retry the upsert
|
|
|
|
|
// https://github.com/NodeBB/NodeBB/issues/4467
|
|
|
|
|
// https://jira.mongodb.org/browse/SERVER-14322
|
|
|
|
@ -448,7 +453,7 @@ module.exports = function (db, module) {
|
|
|
|
|
var query = { _key: key };
|
|
|
|
|
buildLexQuery(query, min, max);
|
|
|
|
|
|
|
|
|
|
db.collection('objects').find(query, { _id: 0, value: 1 })
|
|
|
|
|
db.collection('objects').find(query, { projection: { _id: 0, _key: 0, score: 0 } })
|
|
|
|
|
.sort({ value: sort })
|
|
|
|
|
.skip(start)
|
|
|
|
|
.limit(count === -1 ? 0 : count)
|
|
|
|
@ -469,7 +474,7 @@ module.exports = function (db, module) {
|
|
|
|
|
var query = { _key: key };
|
|
|
|
|
buildLexQuery(query, min, max);
|
|
|
|
|
|
|
|
|
|
db.collection('objects').remove(query, function (err) {
|
|
|
|
|
db.collection('objects').deleteMany(query, function (err) {
|
|
|
|
|
callback(err);
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
@ -499,13 +504,12 @@ module.exports = function (db, module) {
|
|
|
|
|
module.processSortedSet = function (setKey, processFn, options, callback) {
|
|
|
|
|
var done = false;
|
|
|
|
|
var ids = [];
|
|
|
|
|
var project = { _id: 0, value: 1 };
|
|
|
|
|
if (options.withScores) {
|
|
|
|
|
project.score = 1;
|
|
|
|
|
var project = { _id: 0, _key: 0 };
|
|
|
|
|
if (!options.withScores) {
|
|
|
|
|
project.score = 0;
|
|
|
|
|
}
|
|
|
|
|
var cursor = db.collection('objects').find({ _key: setKey })
|
|
|
|
|
var cursor = db.collection('objects').find({ _key: setKey }, { projection: project })
|
|
|
|
|
.sort({ score: 1 })
|
|
|
|
|
.project(project)
|
|
|
|
|
.batchSize(options.batch);
|
|
|
|
|
|
|
|
|
|
async.whilst(
|
|
|
|
|