Skip to content

Instantly share code, notes, and snippets.

@AmShaegar13
Last active April 17, 2024 15:34
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save AmShaegar13/8a2be6895e6058e67d05a7596dd9bfca to your computer and use it in GitHub Desktop.
Save AmShaegar13/8a2be6895e6058e67d05a7596dd9bfca to your computer and use it in GitHub Desktop.
Delete outdated files from Rocket.Chat
/**
* MongoDB query to delete outdated files from Rocket.Chat. You can specify the number of DAYS
* before a file is considered outdated. Deleted files are removed from GridFS completely keeping
* only the message in chat. The message is modified to be a link that points to ALT_LINK instead
* of the file and '(deleted)' is appended to the title.
*
* Tested with MongoDB 3.4
*/
const DAYS = 60;
const ALT_LINK = "/terms-of-service";
let count = 0;
/* Find all messages with files attached */
db.rocketchat_message.find(
{
ts: { $lt: new Date(new Date().getTime() - 1000 * 60 * 60 * 24 * DAYS) },
file: { $exists: true },
attachments: {
$elemMatch: { type: "file" }
}
}
).forEach(function(msg) {
count++;
var oldTitle = msg.attachments.find(function(a) {
return a.type === "file";
}).title;
/* Delete file from GridFS */
db.rocketchat_uploads.remove({ _id: msg.file._id }, true);
db.rocketchat_uploads.files.remove({ _id: msg.file._id }, true);
db.rocketchat_uploads.chunks.remove({ files_id: msg.file._id }, true);
/* Update message to reflect deletion */
db.rocketchat_message.updateOne(
{
_id: msg._id,
attachments: {
$elemMatch: { type: "file" }
}
},
{
$set: {
"attachments.$.type": "link",
"attachments.$.title": oldTitle + " (deleted)",
"attachments.$.title_link": ALT_LINK,
"attachments.$.title_link_download": false
},
$unset: {
"file": true,
"attachments.$.image_url": true,
"attachments.$.image_type": true,
"attachments.$.image_size": true
}
}
);
});
print('Successfully deleted ' + count + ' files.');
@TehPeGaSuS
Copy link

Hello!
How do i add this to my Rocket.Chat instance?

@ashishmadeti
Copy link

@PeGaSuS-Coder If you are running via snaps, you can connect to MongoDB using rocketchat-server.mongo

You will also have to run the commands
db.runCommand({compact:"rocketchat_uploads.chunks", force: true})
db.runCommand({compact:"rocketchat_uploads.files", force: true})
db.runCommand({compact:"rocketchat_uploads", force: true})
for reclaiming the space

@NickCarter1
Copy link

/> rocketchat-server.mongo
MongoDB shell version v5.0.15
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("39bc2002-843a-4832-b5a1-8e24dff345b4") }
MongoDB server version: 5.0.15

rs0:PRIMARY> load( "purge_outdated_rocketchat_uploads.js" );
Error: error loading js file: purge_outdated_rocketchat_uploads.js :
@(shell):1:1

what's the issue ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment