【发布时间】: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。我只想转换为时间,这样我就可以从另一个中减去一个并获得通话之间的时间。您对是否有其他方法而不是转换有什么建议吗?顺便为答案喝彩。
标签: mongodb datetime match aggregation projection