Я пытаюсь реализовать Event Sourcing, используя MongoDB, у меня есть коллекция, скажем, Project с примерно 10 атрибутами, ProjectId в качестве ключевого атрибута, первоначально, когда документы создаются, все 10 атрибутов проекта вместе с идентификатором проекта вставляются в коллекцию вместе с отметкой времени , Для обновления я вставляю другую запись с тем же проектом в коллекцию с отметкой времени, только с обновленными полями. Я хочу создать представление, которое предоставит моментальный снимок данных проекта в определенный момент времени. Я могу создать вид как здесь
db.createView('projectview', 'project', [
{
"$sort": { "Date": 1 }
},
{
"$group": {
"_id": "$ProjectID",
"TimeStamp":{"$max": "$TimeStamp"},
"Attribute1": {
"$mergeObjects": "$Attribute1"
},
"Attribute2": {
"$mergeObjects": "$Attribute2"
},
"Attribute3": {
"$mergeObjects": "$Attribute3"
},
"Attribute4": {
"$mergeObjects": "$Attribute4"
}
}
}
])
Этот вид всегда будет предоставлять последний снимок. Я хочу создать представление с динамическим фильтром c, чтобы данный фильтр критериев фильтра фактически применялся к базовой коллекции перед выполнением конвейера агрегации.
db.getCollection('projectview').find(
{
"_id": "P1",
"date": {
"$lt": "2020-02-02"
}
})
для этого случая базовая коллекция должна сначала фильтроваться для ProjectId 1 и отметки времени меньше.
Запросить помощь.