feat: use covered query

This commit is contained in:
Barış Soner Uşaklı
2020-07-03 23:23:42 -04:00
parent 412ca4ae71
commit 057b783df7
2 changed files with 15 additions and 7 deletions

View File

@@ -15,16 +15,23 @@ module.exports = function (module) {
if (!key) { if (!key) {
return; return;
} }
if (Array.isArray(key)) { if (Array.isArray(key)) {
const data = await module.client.collection('objects').find({ _key: { $in: key } }).toArray(); const data = await module.client.collection('objects').find({
var map = {}; _key: { $in: key },
}, { _id: 0, _key: 1 }).toArray();
const map = {};
data.forEach(function (item) { data.forEach(function (item) {
map[item._key] = true; map[item._key] = true;
}); });
return key.map(key => !!map[key]); return key.map(key => !!map[key]);
} }
const item = await module.client.collection('objects').findOne({ _key: key });
const item = await module.client.collection('objects').findOne({
_key: key,
}, { _id: 0, _key: 1 });
return item !== undefined && item !== null; return item !== undefined && item !== null;
}; };
@@ -74,15 +81,16 @@ module.exports = function (module) {
if (!key) { if (!key) {
return; return;
} }
var data = { data: value }; await module.setObject(key, { data: value });
await module.setObject(key, data);
}; };
module.increment = async function (key) { module.increment = async function (key) {
if (!key) { if (!key) {
return; return;
} }
const result = await module.client.collection('objects').findOneAndUpdate({ _key: key }, { $inc: { data: 1 } }, { returnOriginal: false, upsert: true }); const result = await module.client.collection('objects').findOneAndUpdate({
_key: key,
}, { $inc: { data: 1 } }, { returnOriginal: false, upsert: true });
return result && result.value ? result.value.data : null; return result && result.value ? result.value.data : null;
}; };

View File

@@ -428,7 +428,7 @@ module.exports = function (module) {
count = count !== undefined ? count : 0; count = count !== undefined ? count : 0;
buildLexQuery(query, min, max); buildLexQuery(query, min, max);
const data = await module.client.collection('objects').find(query, { projection: { _id: 0, _key: 0, score: 0 } }) const data = await module.client.collection('objects').find(query, { projection: { _id: 0, value: 1 } })
.sort({ value: sort }) .sort({ value: sort })
.skip(start) .skip(start)
.limit(count === -1 ? 0 : count) .limit(count === -1 ? 0 : count)