From 057b783df771433afb15652f9e6546185119161c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Fri, 3 Jul 2020 23:23:42 -0400 Subject: [PATCH] feat: use covered query --- src/database/mongo/main.js | 20 ++++++++++++++------ src/database/mongo/sorted.js | 2 +- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/database/mongo/main.js b/src/database/mongo/main.js index cff34cc429..59e3f94481 100644 --- a/src/database/mongo/main.js +++ b/src/database/mongo/main.js @@ -15,16 +15,23 @@ module.exports = function (module) { if (!key) { return; } + if (Array.isArray(key)) { - const data = await module.client.collection('objects').find({ _key: { $in: key } }).toArray(); - var map = {}; + const data = await module.client.collection('objects').find({ + _key: { $in: key }, + }, { _id: 0, _key: 1 }).toArray(); + + const map = {}; data.forEach(function (item) { map[item._key] = true; }); 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; }; @@ -74,15 +81,16 @@ module.exports = function (module) { if (!key) { return; } - var data = { data: value }; - await module.setObject(key, data); + await module.setObject(key, { data: value }); }; module.increment = async function (key) { if (!key) { 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; }; diff --git a/src/database/mongo/sorted.js b/src/database/mongo/sorted.js index 4721c0bc14..7bacae999f 100644 --- a/src/database/mongo/sorted.js +++ b/src/database/mongo/sorted.js @@ -428,7 +428,7 @@ module.exports = function (module) { count = count !== undefined ? count : 0; 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 }) .skip(start) .limit(count === -1 ? 0 : count)