À quoi ressemble votre architecture de déploiement ? Je suis un peu confus lorsque vous dites "plusieurs serveurs" - voulez-vous dire plusieurs instances de mongod ? De plus, il y a un peu de confusion lorsque vous spécifiez vos exigences. Selon l'exigence 1, si vous téléchargez vers S3, alors le fichier gridfs devrait être supprimé. Cependant, selon vos exigences, il ne peut pas exister à la fois dans S3 et Gridfs, donc l'exigence 2 semble être une contradiction avec la première, c'est-à-dire qu'il ne devrait pas exister dans Gridfs en premier lieu. Conservez-vous certains fichiers à la fois sur Gridfs et S3 ?
Si vous travaillez dans un ensemble de répliques ou un cluster sharded, vous pouvez créer un fichier curseur disponible sur votre collection gridfs (vous pouvez également le faire sur un seul nœud, bien que ce ne soit pas recommandé). Lorsque vous voyez une opération d'insertion (qui ressemblera à 'op':'i'), vous pourriez exécuter un script ou faire quelque chose dans votre application pour saisir le fichier de gridfs et pousser le fichier approprié vers s3. De même, lorsque vous voyez une opération de suppression ('op':'d'), vous pourriez sommairement supprimer le fichier de s3.
La beauté d'un curseur disponible est qu'il permet des opérations asynchrones - un autre processus peut surveiller l'oplog sur un autre serveur et effectuer les actions appropriées.