add script to delete message ids from unlinked channels from db
This commit is contained in:
parent
d51b7f2807
commit
800b9ed492
1 changed files with 50 additions and 0 deletions
50
bridge/src/data_deletion.ts
Normal file
50
bridge/src/data_deletion.ts
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
/**
|
||||||
|
* When executed, this file scans the entire `messages` database collection
|
||||||
|
* and deletes entries belonging to channels which do no longer have a bridge
|
||||||
|
* configuration associated. Reads mongo URI from $DB_STRING env var.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Mongo from 'mongodb';
|
||||||
|
|
||||||
|
if (!process.env.DB_STRING) {
|
||||||
|
console.error('$DB_STRING not provided.');
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
const mongo = new Mongo.MongoClient(process.env.DB_STRING);
|
||||||
|
|
||||||
|
(async () => {
|
||||||
|
await mongo.connect();
|
||||||
|
const client = mongo.db();
|
||||||
|
const messages = client.collection('bridged_messages');
|
||||||
|
|
||||||
|
const res = messages.aggregate([{
|
||||||
|
$lookup: {
|
||||||
|
from: 'bridge_config',
|
||||||
|
localField: 'channels.discord',
|
||||||
|
foreignField: 'discord',
|
||||||
|
as: 'bridgeConfig',
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
|
||||||
|
let buf: string[] = [];
|
||||||
|
|
||||||
|
const execute = async () => {
|
||||||
|
const ids = [ ...buf ];
|
||||||
|
buf.length = 0;
|
||||||
|
|
||||||
|
if (ids.length) {
|
||||||
|
console.log('Deleting ' + ids.length + ' entries');
|
||||||
|
await messages.deleteMany({ _id: { $in: ids } });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
res.on('data', data => {
|
||||||
|
if (!data.bridgeConfig?.length) buf.push(data._id);
|
||||||
|
if (buf.length >= 500) execute();
|
||||||
|
});
|
||||||
|
|
||||||
|
res.on('end', () => {
|
||||||
|
execute().then(() => process.exit(0));
|
||||||
|
});
|
||||||
|
})();
|
Loading…
Reference in a new issue