MongoDB- структура данных месячной / годовой схемы, вложенная в один встроенный документ?
Используя MongoDb и Mongoose,
Я хочу создать веб-приложение, которое отслеживает температуру комнат. Temp может быть введен в любое время дня... например, раз в час (я могу ограничить рост массива во внешнем интерфейсе). У меня будут графики, на которых пользователь может показывать по дням, неделям, месяцам или годам... так что, как и раньше, это будут запросы.
Используя MongoDb, у меня есть эта схема:
var weeklySchema = new Schema({
_user: { type: Number, ref: 'User' },
_id: ObjectId(),
room: String,
updated_at: Date,
sun: [ { _id: ObjectId(), value: Number } ], //ObjectId() would be the time stamp of value
mon: [ { _id: ObjectId(), value: Number } ],
tues: [ { _id: ObjectId(), value: Number } ],
wed: [ { _id: ObjectId(), value: Number } ],
thur: [ { _id: ObjectId(), value: Number } ],
fri: [ { _id: ObjectId(), value: Number } ],
sat: [ { _id: ObjectId(), value: Number } ]
});
Я хотел бы воспользоваться встроенными документами MongoDb и поместить больше информации в один документ, поэтому я подумал вместо ежемесячной схемы. Но я читал, где MongoDb плохо запрашивает / читает / записывает, если структуры данных становятся вложенными или имеют древовидную структуру.
Если бы я делал ежемесячный или даже годовой документ, стала бы структура данных настолько вложенной, что я бы потерял преимущество в производительности / оптимизации одного встроенного документа? Если нет, как я могу структурировать ежемесячно или ежегодно, как у меня выше?
1 ответ
Создайте свою схему как Date Aggregation Operations
,
var dailySchema = new Schema({
_user: { type: Number, ref: 'User' },
_id: ObjectId(),
room: String,
updated_at: Date,
});
var Daily = mongoose.model('Daily', dailySchema);
Тогда вы можете работать update_at
через
Daily.aggregate({ $project: { day: { $dayOfMonth: "$updated_at" } } });
Также еженедельные, ежемесячные и годовые данные могут быть получены. Вот одна дискуссия здесь