是否可以只查询mongo日期字段的月份的第一个(或最后一个或任何单个?)日。mongo查询仅选择月份的第一个月
我经常使用$date aggregation operators,但在$ group子句中。
基本上我已经为每月的每一天汇总(平均)的字段。我想仅选择其中一天(以该值作为整个月的代表)
以下是2014年1月1日至2015年2月1日的记录集样本,其中price
作为每日价格和28day_avg
作为28天的月平均值。
{ "date" : ISODate("2014-01-01T00:00:00Z"), "_id" : ObjectId("533b3697574e2fd08f431cff"), "price": 59.23, "28day_avg": 54.21}
{ "date" : ISODate("2014-01-02T00:00:00Z"), "_id" : ObjectId("533b3697574e2fd08f431cff"), "price": 58.75, "28day_avg": 54.15}
...
{ "date" : ISODate("2015-02-01T00:00:00Z"), "_id" : ObjectId("533b3697574e2fd08f431cff"), "price": 123.50, "28day_avg": 122.25}
方法1. IM目前使用$月份的数据运行的聚合(和求和price
),但一个问题是,即时通讯寻求获取基础日期值ISODate(“2015-02-01T00:00:00Z “)与几个日期聚合(在第一周,第一月,第一周的循环)附带的0,1,2值相比较。 mod(28)的日期?
方法2 我想简单地摘下一个28day_avg
作为该时期的代表记录。该月的第一将是足够
期望的输出是...
_id: ISODate("2015-02-01T00:00:00Z"), value: 122.25,
_id: ISODate("2015-01-01T00:00:00Z"), value: 120.78,
_id: ISODate("2014-12-01T00:00:00Z"), value: 118.71,
...
_id: ISODate("2014-01-01T00:00:00Z"), value: 53.21,
当然
,该值将来自方法1变化到2的方法,但是这是罚款。一个是28天的落后,而另一个将占28,30,31天的月份......不关心那么多。
非聚集是好的,但也没有工作。又名{"date": { "$mod": [ 28, 0 ]} }
能否请您提供一个样本文档中的问题,你想怎么日期为汇总在输出中。它会为您的问题提供更多的清晰度。 – BatScream 2015-02-10 05:33:45
我不完全理解方法1的要求。您能否向我们展示有问题的聚合? – wdberkeley 2015-02-10 16:06:14