获取文档的周范围

时间:2015-10-14 19:32:27

标签: mongodb date

我试图按周获取所有记录的唯一日期范围。我希望允许用户在mm-dd-yyyy - mm-dd-yyyy之间获得一组记录,如下所示:

enter image description here

架构摘要:

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'
                        }
                    }
                }
            }
        ]
    );

结果:这似乎为我提供了每条记录的唯一日期:

enter image description here

然后我将其格式化为如上所示。不幸的是,结果似乎不匹配,无序。

        res.data[0].distinctDate.forEach(function(v, k) {
            weeks.push(v.month + '/' + v.day + '/' + v.year);
        });

enter image description here

如何构建查询以获取所有记录的周范围?

我已经完成了这个类似的查询(与上面相同的查询,没有dayOfMonthweek)几个月,并且能够得到我想要的内容:

$scope.monthlySummaries = res.data[0].distinctDate;

enter image description here

注意:我原本只是想抓住每条记录的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();

0 个答案:

没有答案