我试图按周获取所有记录的唯一日期范围。我希望允许用户在mm-dd-yyyy - mm-dd-yyyy
之间获得一组记录,如下所示:
架构摘要:
var orderSchema = mongoose.Schema({
date: Date, //ISO formatted date
查询:我正在尝试使用aggregate
格式化ISO日期。
var query = Order.aggregate(
[
{
$project:
{
year:
{
$year: '$date'
},
month:
{
$month: '$date'
},
day:
{
$dayOfMonth: '$date'
},
week:
{
$week: '$date'
}
}
},
{
$group:
{
_id: null,
distinctDate:
{
$addToSet:
{
year: '$year',
month: '$month',
day: '$day',
week: '$week'
}
}
}
}
]
);
结果:这似乎为我提供了每条记录的唯一日期:
然后我将其格式化为如上所示。不幸的是,结果似乎不匹配,无序。
res.data[0].distinctDate.forEach(function(v, k) {
weeks.push(v.month + '/' + v.day + '/' + v.year);
});
如何构建查询以获取所有记录的周范围?
我已经完成了这个类似的查询(与上面相同的查询,没有dayOfMonth
和week
)几个月,并且能够得到我想要的内容:
$scope.monthlySummaries = res.data[0].distinctDate;
注意:我原本只是想抓住每条记录的distinct
ISO
个日期,
db.mycollection.distinct('date', {}, {});
但是这会以秒为单位返回不同的日期,这意味着它会提供重复日期,样本输出:
ISODate("2015-10-13T15:44:31.944Z"),
ISODate("2015-10-13T16:52:03.830Z"),
ISODate("2015-10-13T17:18:25.798Z"),
ISODate("2015-10-13T17:24:47.881Z")
然后我只需使用momentJS
格式化前端的时间:
var formattedDate = moment(data.date).format('MM-DD-YYYY');
var weekNumber = moment(formattedDate, "MM-DD-YYYY").isoWeek();