У меня есть коллекция сообщений:Есть ли способ атомного обновления двух коллекций в MongoDB?
{
messageid: ObjectId
userid: ObjectId
message: string
isread: true|false
}
и набор сообщений подсчитывает для каждого пользователя:
{
userid: ObjectId
total: int
unread: int
}
Когда я удалю сообщение от «сообщения» сбор, мне также нужно уменьшить «общего »в коллекции« counts »и условно (если« messages.isread »== false) также уменьшает« непрочитанное »поле.
Для этого мне нужно сначала получить сообщение, проверить его поле «isread», а затем обновить подсчеты. Существует вероятность того, что сообщение будет помечено как прочитанное между этими действиями, тогда я уменьшу «непрочитанные» подсчеты неправильно.
Есть ли способ условно изменить что-то в одной коллекции по результатам другой коллекции за один выстрел?
Это тоже был мой вопрос :) Мой сайт будет сравнительно высокой нагрузкой, и я не хочу пересчитывать статистику каждый раз, когда они мне нужны, поэтому я использую эту коллекцию счетчиков. – Andrey
Вы должны просмотреть его, если вы еще этого не сделали. – Maxence
Даже без профилирования я могу сказать, что cursor.count() всегда будет намного медленнее, чем просто получить число, особенно на наборах сотен миллионов записей. – Andrey