使用MongoDb和Mongoose,
我想创建一个跟踪房间温度的网络应用。可以在一天中的任何时间输入临时值...例如,像每小时一次(我可以限制前端的阵列增长)。我将有一个图表,用户可以按天,周,月或年显示....所以明智的,那些将是查询。
使用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不会查询/读/写的地方。
如果我每月,甚至是一年一次的单个文档,数据结构是否会嵌套,我会失去单个嵌入式文档的性能/优化优势?如果没有,我怎么能像上面那样按月或按年结构呢?
答案 0 :(得分:0)
将您的架构设计为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" } } });
还可以检索每周,每月和每年的数据。这是一个讨论here