当我想要以毫秒为单位的Unix时间时,Mongodb Timestamp输出格式返回“ $ numberLong”对象

med*_*ech 1 java format time json mongodb

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

 "TimeStamp": {
                "StartTime": 1549371540000,
                "EndTime" : 1549371540000,
                "StartTimeZone":"Europe/Berlin",
                "EndTimeZone":"Europe/Berlin"
            }
Run Code Online (Sandbox Code Playgroud)

过滤有效,但结果如下:

"TimeStamp": {
                    "StartTimeZone": "Europe/Berlin",
                    "EndTimeZone": "Europe/Berlin",
                    "EndTime": {
                        "$numberLong": "1549371540000"
                    },
                    "StartTime": {
                        "$numberLong": "1549371540000"
                    }
                }
Run Code Online (Sandbox Code Playgroud)

是否可以仅使用$ 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());
        }
Run Code Online (Sandbox Code Playgroud)

将结果另存为json列表。我知道不赞成使用toJson方法,但无法找到一种将文档转换为JSON表示法的方法。

Vij*_*hit 5

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

JsonWriterSettings settings = JsonWriterSettings.builder()
        .int64Converter((value, writer) -> writer.writeNumber(value.toString())).build();

document.toJson(settings); // The output would contain simple long value
Run Code Online (Sandbox Code Playgroud)

我知道不赞成使用toJson方法

不建议使用@medTech toJson方法,请在这里参考Document的官方文档。另外,对于 json编写器设置,请点击链接。