mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-13 01:15:47 +01:00
feat: #7707, added sortedSetAddBulk
This commit is contained in:
@@ -72,8 +72,17 @@ module.exports = function (db, module) {
|
||||
bulk.find({ _key: keys[i], value: value }).upsert().updateOne({ $set: { score: parseFloat(isArrayOfScores ? scores[i] : scores) } });
|
||||
}
|
||||
|
||||
bulk.execute(function (err) {
|
||||
callback(err);
|
||||
bulk.execute(err => callback(err));
|
||||
};
|
||||
|
||||
module.sortedSetAddBulk = function (data, callback) {
|
||||
if (!Array.isArray(data) || !data.length) {
|
||||
return setImmediate(callback);
|
||||
}
|
||||
var bulk = db.collection('objects').initializeUnorderedBulkOp();
|
||||
data.forEach(function (item) {
|
||||
bulk.find({ _key: item[0], value: String(item[2]) }).upsert().updateOne({ $set: { score: parseFloat(item[1]) } });
|
||||
});
|
||||
bulk.execute(err => callback(err));
|
||||
};
|
||||
};
|
||||
|
||||
@@ -125,4 +125,37 @@ INSERT INTO "legacy_zset" ("_key", "value", "score")
|
||||
});
|
||||
}, callback);
|
||||
};
|
||||
|
||||
module.sortedSetAddBulk = function (data, callback) {
|
||||
if (!Array.isArray(data) || !data.length) {
|
||||
return setImmediate(callback);
|
||||
}
|
||||
const keys = [];
|
||||
const values = [];
|
||||
const scores = [];
|
||||
data.forEach(function (item) {
|
||||
keys.push(item[0]);
|
||||
scores.push(item[1]);
|
||||
values.push(item[2]);
|
||||
});
|
||||
module.transaction(function (tx, done) {
|
||||
var query = tx.client.query.bind(tx.client);
|
||||
|
||||
async.series([
|
||||
async.apply(helpers.ensureLegacyObjectsType, tx.client, keys, 'zset'),
|
||||
async.apply(query, {
|
||||
name: 'sortedSetAddBulk2',
|
||||
text: `
|
||||
INSERT INTO "legacy_zset" ("_key", "value", "score")
|
||||
SELECT k, v, s
|
||||
FROM UNNEST($1::TEXT[], $2::TEXT[], $3::NUMERIC[]) vs(k, v, s)
|
||||
ON CONFLICT ("_key", "value")
|
||||
DO UPDATE SET "score" = EXCLUDED."score"`,
|
||||
values: [keys, values, scores],
|
||||
}),
|
||||
], function (err) {
|
||||
done(err);
|
||||
});
|
||||
}, callback);
|
||||
};
|
||||
};
|
||||
|
||||
@@ -69,4 +69,15 @@ module.exports = function (redisClient, module) {
|
||||
callback(err);
|
||||
});
|
||||
};
|
||||
|
||||
module.sortedSetAddBulk = function (data, callback) {
|
||||
if (!Array.isArray(data) || !data.length) {
|
||||
return setImmediate(callback);
|
||||
}
|
||||
var batch = redisClient.batch();
|
||||
data.forEach(function (item) {
|
||||
batch.zadd(item[0], item[1], item[2]);
|
||||
});
|
||||
batch.exec(err => callback(err));
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user