Отслеживание обновлений профиля
В этом шаге мы реализуем надежный механизм для отслеживания обновлений профиля в MongoDB. Мы покажем, как поддерживать журнал аудита изменений и управлять историей модификаций профиля.
Создание механизма отслеживания обновлений
Обновим наши существующие профили, чтобы включить комплексную систему отслеживания обновлений:
// Update John Doe's profile with update tracking
db.profiles.updateOne(
{ username: "johndoe" },
{
$set: {
update_history: {
created_at: new Date("2024-01-15T10:30:00Z"),
last_updated: new Date(),
version: 1,
update_log: [
{
timestamp: new Date(),
updated_fields: ["contact_details", "user_settings", "preferences"],
update_type: "profile_enhancement",
updated_by: "self"
}
]
},
metadata: {
profile_completeness: 85,
last_login: new Date(),
account_status: "active"
}
},
$push: {
"update_history.update_log": {
timestamp: new Date(),
updated_fields: ["preferences"],
update_type: "preference_update",
updated_by: "system"
}
}
}
);
Понимание отслеживания обновлений
Наше отслеживание обновлений включает:
- Метку времени создания
- Метку времени последнего обновления
- Отслеживание версии
- Подробный журнал обновлений
- Метаданные о статусе профиля
Добавим другой профиль с другим подходом к отслеживанию обновлений:
db.profiles.insertOne({
username: "sarahlee",
personal_info: {
first_name: "Sarah",
last_name: "Lee",
age: 32
},
update_tracking: {
profile_versions: [
{
version: 1,
created_at: new Date(),
update_summary: "Initial profile creation"
}
],
recent_changes: {
total_updates: 0,
last_significant_update: null
},
verification_status: {
email_verified: false,
phone_verified: false
}
}
});
Для демонстрации отслеживания обновлений давайте выполним обновление и зафиксируем изменения:
db.profiles.updateOne(
{ username: "sarahlee" },
{
$push: {
"update_tracking.profile_versions": {
version: 2,
created_at: new Date(),
update_summary: "Added contact information"
}
},
$set: {
"update_tracking.recent_changes.total_updates": 1,
"update_tracking.recent_changes.last_significant_update": new Date()
}
}
);
Проверьте обновленные профили:
db.profiles.find({
$or: [{ username: "johndoe" }, { username: "sarahlee" }]
});