refactor: some cleanup of dbal code

This commit is contained in:
Barış Soner Uşaklı
2026-03-27 11:24:43 -04:00
parent 8547fa9e48
commit 837d984b84
5 changed files with 42 additions and 50 deletions

View File

@@ -24,12 +24,8 @@ module.exports = function (module) {
_key: { $in: key },
}, { _id: 0, _key: 1 }).toArray();
const map = Object.create(null);
data.forEach((item) => {
map[item._key] = true;
});
return key.map(key => !!map[key]);
const foundKeys = new Set(data.map(item => item._key));
return key.map(key => foundKeys.has(key));
}
const item = await module.client.collection('objects').findOne({
@@ -76,7 +72,9 @@ module.exports = function (module) {
return;
}
const objectData = await module.client.collection('objects').findOne({ _key: key }, { projection: { _id: 0 } });
const objectData = await module.client.collection('objects').findOne(
{ _key: key }, { projection: { _id: 0 } }
);
// fallback to old field name 'value' for backwards compatibility #6340
let value = null;
@@ -100,12 +98,12 @@ module.exports = function (module) {
{ projection: { _id: 0 } }
).toArray();
const map = {};
const map = Object.create(null);
data.forEach((d) => {
map[d._key] = d.data;
});
return keys.map(k => (map.hasOwnProperty(k) ? map[k] : null));
return keys.map(k => map[k] !== undefined ? map[k] : null);
};
module.set = async function (key, value) {

View File

@@ -128,7 +128,7 @@ module.exports = function (module) {
const item = await module.client.collection('objects').findOne({
_key: key, members: value,
}, {
projection: { _id: 0, _key: 1},
projection: { _id: 0, _key: 1 },
});
return item !== null && item !== undefined;
@@ -177,12 +177,8 @@ module.exports = function (module) {
projection: { _id: 0, _key: 1 },
}).toArray();
const map = {};
result.forEach((item) => {
map[item._key] = true;
});
return sets.map(set => !!map[set]);
const foundMembers = new Set(result.map(item => item._key));
return sets.map(set => foundMembers.has(set));
};
module.getSetMembers = async function (key) {
@@ -208,7 +204,7 @@ module.exports = function (module) {
projection: { _id: 0 },
}).toArray();
const sets = {};
const sets = Object.create(null);
data.forEach((set) => {
sets[set._key] = set.members || [];
});

View File

@@ -271,7 +271,10 @@ module.exports = function (module) {
return null;
}
value = helpers.valueToString(value);
const result = await module.client.collection('objects').findOne({ _key: key, value: value }, { projection: { _id: 0, _key: 0, value: 0 } });
const result = await module.client.collection('objects').findOne(
{ _key: key, value: value },
{ projection: { _id: 0, _key: 0, value: 0 } }
);
return result ? result.score : null;
};
@@ -280,15 +283,15 @@ module.exports = function (module) {
return [];
}
value = helpers.valueToString(value);
const result = await module.client.collection('objects').find({ _key: { $in: keys }, value: value }, { projection: { _id: 0, value: 0 } }).toArray();
const map = {};
const result = await module.client.collection('objects').find(
{ _key: { $in: keys }, value: value },
{ projection: { _id: 0, value: 0 } }
).toArray();
const scoreMap = Object.create(null);
result.forEach((item) => {
if (item) {
map[item._key] = item;
}
scoreMap[item._key] = item.score;
});
return keys.map(key => (map[key] ? map[key].score : null));
return keys.map(key => (scoreMap[key] !== undefined ? scoreMap[key] : null));
};
module.sortedSetScores = async function (key, values) {
@@ -299,13 +302,14 @@ module.exports = function (module) {
return [];
}
values = values.map(helpers.valueToString);
const result = await module.client.collection('objects').find({ _key: key, value: { $in: values } }, { projection: { _id: 0, _key: 0 } }).toArray();
const result = await module.client.collection('objects').find(
{ _key: key, value: { $in: values } },
{ projection: { _id: 0, _key: 0 } }
).toArray();
const valueToScore = {};
const valueToScore = Object.create(null);
result.forEach((item) => {
if (item) {
valueToScore[item.value] = item.score;
}
valueToScore[item.value] = item.score;
});
return values.map(v => (utils.isNumber(valueToScore[v]) ? valueToScore[v] : null));
@@ -338,14 +342,8 @@ module.exports = function (module) {
projection: { _id: 0, value: 1 },
}).toArray();
const isMember = {};
results.forEach((item) => {
if (item) {
isMember[item.value] = true;
}
});
return values.map(value => !!isMember[value]);
const foundMembers = new Set(results.map(item => item.value));
return values.map(value => foundMembers.has(value));
};
module.isMemberOfSortedSets = async function (keys, value) {
@@ -359,14 +357,8 @@ module.exports = function (module) {
projection: { _id: 0, _key: 1, value: 1 },
}).toArray();
const isMember = {};
results.forEach((item) => {
if (item) {
isMember[item._key] = true;
}
});
return keys.map(key => !!isMember[key]);
const keysWithMember = new Set(results.map(item => item._key));
return keys.map(key => keysWithMember.has(key));
};
module.getSortedSetMembers = async function (key) {
@@ -411,7 +403,7 @@ module.exports = function (module) {
data.map(item => item.value),
];
}
const sets = {};
const sets = Object.create(null);
data.forEach((item) => {
sets[item._key] = sets[item._key] || [];
if (withScores) {

View File

@@ -56,8 +56,8 @@ module.exports = function (module) {
if (!Array.isArray(data) || !data.length) {
return;
}
const bulk = module.client.collection('objects').initializeUnorderedBulkOp();
data.forEach(item => bulk.find({ _key: item[0], value: String(item[1]) }).delete());
await bulk.execute();
await module.client.collection('objects').deleteMany({
$or: data.map(([key, value]) => ({ _key: key, value: String(value) })),
});
};
};

View File

@@ -44,6 +44,12 @@ describe('Key methods', () => {
assert.deepStrictEqual(await db.mget(null), []);
});
it('should return 0 if value of key is 0', async () => {
await db.set('zeroKey', 0);
const value = await db.mget(['zeroKey']);
assert.strictEqual(value[0], 0);
});
it('should return true if key exist', (done) => {
db.exists('testKey', function (err, exists) {
assert.ifError(err);