【问题标题】:Mongo DB ISO formatMongoDB ISO 格式
【发布时间】:2017-05-13 05:10:19
【问题描述】:

根据下面的查询返回结果,我想过滤月份和年份。

例如,我只想要 3 月份的数据。

db.SBM_USER_DETAIL.aggregate([
{
    $project: {
        join_date: '$JOIN_DATE' 
    }
}
]).map(
    function(d) {
       d.join_date = moment(d.join_date).locale('es').tz("Asia/Kolkata").format();
       return d
})

如何在MongoDB聚合查询中使用join_date返回的格式化值?

【问题讨论】:

  • 对我(也可能对其他人)来说,您的要求并不清楚。你说你想按月和年过滤。然后你问如何使用join_date的格式化值。您的意思是要按月和年对返回的 join_date 值应用过滤器吗?
  • 首先对此表示抱歉。是的,我想按月和年对返回的 join_date 值应用过滤器。
  • 请您解释一下是否有必要使用map 函数?您在此查询中想要的只是能够按日期月份和年份过滤吗?

标签: mongodb aggregation-framework


【解决方案1】:

MongoDB 的 ISODate 与 javascript Date 类非常相似。如果您在加尔各答时区有一个日期范围,并希望以此进行过滤,请在运行查找之前实例化一对 Date 对象以定义该范围。

对于这种情况,要返回 2017 年 3 月内的所有 join_date 值,转换为加尔各答 (UTC-07:00) 时区,过滤大于或等于 3 月 1 日午夜且小于 4 月 1 日午夜的日期,然后使用矩转换结果:

var first = new Date("2017-03-01T00:00:00-07:00");
var last = new Date("2017-04-01T00:00:00-07:00");
db.SBM_USER_DETAIL.find(
    {join_date:{$gte: first, $lt: last}}, //filter based on join_date
    {join_date:1,_id:0}   // only return join_date, omit this if you need all fields
).map(
    function(d) {
        d.join_date = moment(d.join_date).locale('es').tz("Asia/Kolkata").format();
        return d;
    }
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2023-01-03
    • 2019-04-30
    • 2017-02-01
    • 2013-05-05
    • 1970-01-01
    • 2020-11-13
    相关资源
    最近更新 更多