Вы можете создать объект запроса, который используется для deleteMany
, и вместо этого использовать его для запроса документов через find
. Это даст вам все целевые документы, которые вы затем сможете удалить с помощью deleteMany
.
. После этого, если количество удаленных документов соответствует длине извлеченных документов, вы можете безопасно удалить все из автора. Если общее количество удаленных файлов не соответствует длине извлеченных документов, вы можете выполнить итерацию по всем первоначально извлеченным документам, попытаться получить их, а если они не найдены, то это означает, что они удалены, и вы можете безопасно удалить их у автора.
Пример в машинописном тексте:
const queryObj = { foo: 'bar' };
const postsCollection = mongoDb.getCollection<{ _id: ObjectId }>('posts');
const postsToDelete = await postsCollection.find(queryObj).toArray();
const deleteManyResult = await postsCollection.deleteMany(queryObj);
if (deleteManyResult.deletedCount === postsToDelete.length) {
for (const deletedPost of postsToDelete) {
// delete from author
}
} else {
for (const potentiallyDeletedPost of postsToDelete) {
const post = await postsCollection.findOne({ _id: potentiallyDeletedPost._id });
if (!post) {
// delete from author
} else {
// handle non-deleted post
}
}
}