mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-05-06 09:17:01 +02:00
refactor: some cleanup of dbal code
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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 || [];
|
||||
});
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) })),
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user