我在MongoDB中有一个文档的以下模式:
var postSchema = new mongoose.Schema({
domain: { type: String, enum: ['public', 'private'], required: true },
created_at: { type: Date },
last_modified: { type: Date },
data: {
start_date: {
year: { type: Number, required: true },
month: { type: Number },
day: { type: Number },
hour: { type: Number },
minute: { type: Number }
},
end_date: {
year: { type: Number },
month: { type: Number },
day: { type: Number },
hour: { type: Number },
minute: { type: Number }
}
}
});
我想要做的是,当执行一个简单的查询来查找所有文档时,返回按对象start_date
的升序排序的所有文档,即对象本身代表一个日期,我会喜欢按升序日期返回所有文件。可以这样做吗?如果是,怎么样?
如果不可能,我想我可以有一个Date
类型的附加字段,然后使用此字段进行排序,对吧?虽然我可能没有完整的对象(年,月,日,小时和分钟)。
答案 0 :(得分:1)
请尝试使用多个排序字段
Post.find({}).sort({'data.start_date.year': 1,
'data.start_date.month': 1,
'data.start_date.day': 1,
'data.start_date.hour': 1,
'data.start_date.minute': 1
}).exec(function(err, results){})
通过这种方式,最好为它构建index,
postSchema.index({'data.start_date.year': 1,
'data.start_date.month': 1,
'data.start_date.day': 1,
'data.start_date.hour': 1,
'data.start_date.minute': 1});
但是,最好将字段start_date
存储为一个Date()
类型。
答案 1 :(得分:0)
Post.find({})
.sort({'data.start_date.year': 1,
'data.start_date.month': 1,
'data.start_date.day': 1,
'data.start_date.hour': 1,
'data.start_date.minute': 1
})
.exec(function(err, result){
});