【问题标题】:Mongodb Timestamp Output Format returns "$numberLong" Object when I want to get the unix time in millis当我想以毫秒为单位获取 unix 时间时,Mongodb 时间戳输出格式返回“$numberLong”对象
【发布时间】:2019-12-07 12:48:00
【问题描述】:

我开发了一个在 MongoDb 中保存 JSON 的 Spring 应用程序。 客户端能够通过输入时间间隔开始和结束来搜索数据。 为了能够使用正则表达式(lte 和 gte)从数据库中获取数据,我将时间保存为 UnixTimeStamp:

 "TimeStamp": {
                "StartTime": 1549371540000,
                "EndTime" : 1549371540000,
                "StartTimeZone":"Europe/Berlin",
                "EndTimeZone":"Europe/Berlin"
            }

过滤有效,但结果如下:

"TimeStamp": {
                    "StartTimeZone": "Europe/Berlin",
                    "EndTimeZone": "Europe/Berlin",
                    "EndTime": {
                        "$numberLong": "1549371540000"
                    },
                    "StartTime": {
                        "$numberLong": "1549371540000"
                    }
                }

是否可以使用 $numberLong 键获取键值对而不是 StartTime 对象? 我也在考虑用 yyyy_mm_ddTHH:MM:SS+-Offset 节省时间 aso Iso 格式

但据我所知,我可以只使用正则表达式来过滤这种格式的时间。 处理时间是项目的重要组成部分,我想确保我以最佳实践方式处理这部分。

编辑: 在我的代码中,我要

for (Document doc : collection.find(query).projection(Projections.include(projectionList))) {
            //Save the query result as a List of JSON-Objects
            dataList.add(doc.toJson());
        }

将结果保存为 json 列表。我知道 toJson 方法已被弃用,但我无法找到将文档转换为 JSON 表示法的方法。

【问题讨论】:

    标签: java json mongodb time format


    【解决方案1】:

    是否可以使用 $numberLong 键获取键值对而不是 StartTime 对象?

    JsonWriterSettings settings = JsonWriterSettings.builder()
            .int64Converter((value, writer) -> writer.writeNumber(value.toString())).build();
    
    document.toJson(settings); // The output would contain simple long value
    

    我知道 toJson 方法已被弃用

    @medTech toJson 方法不被弃用,请参考文档here的官方文档。另外,对于json writer settings,请点击链接。

    【讨论】:

    • 不错。好答案!
    猜你喜欢
    • 2011-08-02
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    • 2016-09-06
    • 2022-07-04
    相关资源
    最近更新 更多