【问题标题】:mongoDB: $dateToString format to show time by 15min intervalmongoDB:$dateToString 格式以 15 分钟间隔显示时间
【发布时间】:2020-07-22 16:07:13
【问题描述】:

我这里有一个例子, https://mongoplayground.net/p/fqxBy6NAZXL

如您所见,最终结果包含“dateHour”和“minuteBucket”字段。 我将时间除以 15.0 分钟,因此“minuteBucket”值将始终为 0、1、2、3 之一

“dateHour”现在不显示分钟。

预期:

我需要删除“minuteBucket”字段,但仍将此聚合除以 15 分钟,并显示带有 HH:MM 的“dateHour”,它总是以 15 分钟向上取整。 例如,根据它的时间,它应该看起来像这种格式。

"2020-03-19T18:00:00", "2020-03-19T18:15:00","2020-03-19T18:30:00","2020-03-19T18:45:00"

【问题讨论】:

    标签: mongodb mongoose mongodb-query aggregation-framework


    【解决方案1】:

    可以使用$dateFromString解析dateHour,然后加上_id.minutebucket乘以900000(15分钟*60秒*1000毫秒):

    {
        dateHour: {
            $let: {
                vars: { parsedDate: { $dateFromString: { dateString: "$_id.dateHour", format: "%Y-%m-%dT%H" } } },
                in: { $toString: [ { $add: [ "$$parsedDate", { $multiply: [ "$_id.minuteBucket", 900000 ] } ] } ] }
            }
        }
    }
    

    Mongo Playground

    【讨论】:

    • 让我指出,您现在连续 2 天节省了我的许多时间。多谢。我应该有你的电子邮件地址,以防万一我在 mognodb 查询中遇到问题,哈哈...谢谢
    • 顺便说一句,我还需要从投影字段中删除 minuteBucket。如果我现在删除它,它会破坏查询。你能帮忙吗?
    • @newdeveloper 仅从最后阶段删除它
    • 成功了。我正在做这分钟Bucket:0,它给出了错误谢谢
    • 我在 shell 脚本中使用它,但它给了我错误,不确定语法中缺少什么 -- ZONE_AGGREGATE_COMMAND+=' dateHour: {$let: {vars: {parsedDate: {$dateFromString: {dateString: "$_id.dateHour",格式: "%Y-%m-%dT%H"}}},in: {$toString: [{$add: ["$$parsedDate",{$multiply: ["$ _id.minuteBucket",900000]}]}]}}},'
    猜你喜欢
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    相关资源
    最近更新 更多