feat: use covered query

v1.18.x
Barış Soner Uşaklı 5 years ago
parent 412ca4ae71
commit 057b783df7

@ -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;
}; };

@ -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)

Loading…
Cancel
Save