Я храню информацию об уведомлениях в коллекции MongoDB.В моей коллекции я различаю несколько типов событий и экземпляров событий.Чтобы уменьшить нагрузку на базу данных, когда веб-интерфейс запрашивает данные, эта информация объединяется в один документ (который переходит в дополнительные документы после регистрации слишком большого числа событий).
Все события имеют атрибут status
, которыйиспользуется для определения того, было ли событие прочитано / увидено пользователем.У пользователя есть возможность пометить все элементы одного или всех типов событий как прочитанные.
Я могу легко создать запрос на обновление, чтобы пометить все события определенного типа как прочитанные:
{"$set": {"notifications.IMPORT_SUCCEEDED.events.$[].status": "r"}}
Однако я хочу избежать перебора всех типов событий, чтобы пометить все события всех типов как прочитанные, поскольку этот список может быть довольно длинным (десятки типов событий) - есть ли возможность обновить все(под) ключи в документе (в основном, при замене типа события IMPORT_SUCCEEDED
на подстановочный знак)По сути, я хотел бы сделать что-то вроде этого:
{"$set": {"notifications.${}.events.$[].status": "r"}}
Пример документа:
{
"_id" : ObjectId("5bd1752877ada457400c182f"),
"count" : 1337.0,
"status" : "u",
"notifications" : {
"IMPORT_FAILED" : {
"count" : 1000.0,
"status" : "u",
"events" : [
{
"text" : "bla",
"status" : "u"
},
{
"text" : "bla",
"status" : "u"
},
{
"text" : "bla",
"status" : "u"
},
{
"text" : "bla",
"status" : "u"
},
{
"text" : "bla",
"status" : "u"
}
]
},
"IMPORT_SUCCEEDED" : {
"count" : 337.0,
"status" : "u",
"events" : [
{
"text" : "bla",
"status" : "r"
},
{
"text" : "bla",
"status" : "r"
},
{
"text" : "bla",
"status" : "r"
},
{
"text" : "bla",
"status" : "r"
},
{
"text" : "bla",
"status" : "r"
}
]
}
},
"reference_id" : 42.0
}