По сути пол field это чекалка отправки уведомлений, т.е. 0 не отправлять ответ пользователю, 1 отправлять.
Если вам нужно включать/отключать значение по всем комментам в пределах пользователя, то зачем это значение хранить в каждом коменте.
Для обновления по ключу используйте словарь вместо массива.
Пример:
{
comments: [],
flags: {
user1: true,
user2: false
}
}
С такой структурой, вы можете включить/выключить флаг по пользователю по всем комментам (всему документу), а если нужна возможность переключать конкрентные комменты, то можно рядом хранить в разрезе пользователь-коммент ( flagsByComments:{ user2: {comment1: true, comment2: false} }).
Про сложность обновления, если у вас на 1000 чтений 1 запись, то не страшно, что обновление сложное, главное чтобы чтения были быстрые.
Т.е. при 1000 комментариев надо 1000 раз проверить, и возможно из них 100 раз выполнить запрос на обновление.
С локом достаточно будет одного обновления (ну и +1 обновление для лока, хотя не обязательно, зависит от типа лока)