我开发了一个Spring应用程序,该应用程序将JSON保存在MongoDb中。 客户端可以输入时间间隔开始和结束来搜索数据。 为了能够使用正则表达式(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表示法的方法。
答案 0 :(得分: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
不建议使用我知道toJson方法已弃用
@medTech toJson方法,请参阅文档here的官方文档。另外,对于json writer settings,请点击链接。