【问题标题】:MongoDB Compass Aggregation: Change string to TimeMongoDB Compass 聚合:将字符串更改为时间
【发布时间】:2023-04-02 20:45:01
【问题描述】:

我正在将一个数据集上传到 MongoDB,其中包含一些字段作为时间。当这些被上传时,它们作为字符串进入。像下面的目录:

_id:5dd1a91511a7e24b487bce43 
Unit:"Fire" 
Date:"01-Jan-13" 
TOC:"01:27:19"

我正在尝试使用 Compass 中的聚合工具更改这些内容。我已经匹配了所有 TOC 不是时间戳的文档:

$match
/**
 * query - The query in MQL.
 */
{
  TOC: {$not: {$type: 17}}
}

然后我尝试将字符串转换为时间而不是字符串:

$project
/**
 * specifications - The fields to
 *   include or exclude.
 */
{
  TOC: {
         "$dateFromString": {
            "dateString": '$TOC',
            "format": "%H:%M:%S"
         }
      }
}

得到错误:

an incomplete date/time string has been found, with elements missing: "01:27:19"

知道如何解决这个问题,或者是否有更好的方法?

【问题讨论】:

  • 该错误是因为$dateFromString 的输入必须具有日期 值(带有年、月和日)。可以有日期和时间值,或者只有日期值,但不仅仅是时间值。
  • 为此干杯。那么我需要用什么来将字符串转换为时间呢?
  • 我没有看到任何临时的东西。但是,请尝试在网上搜索。如果您没有找到任何东西,您可能需要添加一些 dummy 日期并将其设为Date。一些技巧,也许。只存储时间是不寻常的。通常,时间和日期作为Date 字段(有时是字符串)一起存储。
  • 是的,数据集在一个字段中有日期,然后我正在使用的时间字段只记录通话时间。所以在 13:55:28 打 1,在 14:03:25 打 2。我只想转换为时间,这样我就可以从另一个中减去一个并获得通话之间的时间。您对是否有其他方法而不是转换有什么建议吗?顺便为答案喝彩。
  • 如果只减去时间,可能无法得到正确的时差。您将如何仅减去跨越一天的时间?为此,您还需要日期。所以,它必须是日期+时间。而且,它需要存储为Date 对象。然后一个简单的减法就会得到时间差。请参阅这些operators 可用于处理日期+时间。您可以同时使用当前日期和时间字符串来获得该功能。

标签: mongodb datetime match aggregation projection


【解决方案1】:

对于同一天的时间:

            {
            $set: {
                dStart: {
                    $dateFromString: {
                        dateString: { $concat: ['1970-01-01T', '$schedules.start'] },
                        format: '%Y-%m-%dT%H:%M'
                    }
                }
            }
        },
        {
            $set: {
                dEnd: {
                    $dateFromString: {
                        dateString: { $concat: ['1970-01-01T', '$schedules.end'] },
                        format: '%Y-%m-%dT%H:%M'
                    }
                }
            }
        },
        {
            $group: {
                _id: '$doctor',
                totalMinutes: {
                    $sum: { $divide: [{ $subtract: ['$dStart', '$dEnd'] }, -60000] }
                }

            }
        },
        {
            $project: {
                _id: 1,
                totalMinutes: 1
            }
        }

【讨论】:

    猜你喜欢
    • 2019-08-14
    • 2016-02-08
    • 2018-11-18
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多