如何在 Java 中没有 NumberLong 或 Date Wrapper 的情况下从 Mongodb 接收日期
How to receive Date from Mongodb without NumberLong or Date Wrapper in Java
目前,我正在开发一个 Java/Spring App
,我可以在其中保存并提供 JSON
from/to 个客户端。
我将日期信息存储为以毫秒为单位的 Unix 时间戳。现在 MongoDB 将其自动存储为
"StartTime": {"$numberLong": "1549640550000"}
当我插入
"StartTime": 1549640550000
我还读到,当我使用 iso8601
格式时,$Date
而不是 $numberLong 会发生这种情况。
如果我的查询结果中没有此包装信息,是否可以从 MongoDB 读取时间信息?
handle/remove 收到纯时间戳信息的信息似乎让我很不舒服。
编辑:
当我使用 document.toJSON (我知道它已被弃用)时,我得到
"StartTime": {"$numberLong": "1549640550000"}
当我使用 document.toString() 我得到
TimeStamp=文档{StartTime=1549554150000}
您需要构建一个 JSON 可以将 NumberLong 转换为 Long 的序列化程序。您可以使用以下设置并将 Document.toJson() 作为参数传递并获得预期的输出。
JsonWriterSettings settings = JsonWriterSettings.builder()
.int64Converter((value, writer) -> writer.writeNumber(value.toString())).build();
document.toJson(settings); // The output would contain simple long value
这个对我有用。我在网上花了几个小时才弄明白。您可以尝试其中的任何一个。
# These 2 queries are equivalent
db.looks.find({ $and: [{ "version":"v2" }, { "styleid":NumberLong("123456789") }]}).count()
db.looks.find({ "$and": [{ "version":"v2" }, { "styleid":{"$eq":123456789} }]}).count()
db.looks.find({ "$and": [{ "version":"v2" }, { "styleid":{"$in":[123456789]} }]}).count()
# Java Code
Criteria criteria = new Criteria();
criteria.andOperator(
Criteria.where(Constants.VERSION).is(Constants.V2),
Criteria.where(Constants.STYLEID).in(Lists.newArrayList(looksRequestV2.getStyleId().intValue()))
// Criteria.where(Constants.STYLEID).is(looksRequestV2.getStyleId().intValue())
// Criteria.where(Constants.STYLEID).is(looksRequestV2.getStyleId())
);
目前,我正在开发一个 Java/Spring App
,我可以在其中保存并提供 JSON
from/to 个客户端。
我将日期信息存储为以毫秒为单位的 Unix 时间戳。现在 MongoDB 将其自动存储为
"StartTime": {"$numberLong": "1549640550000"}
当我插入
"StartTime": 1549640550000
我还读到,当我使用 iso8601
格式时,$Date
而不是 $numberLong 会发生这种情况。
如果我的查询结果中没有此包装信息,是否可以从 MongoDB 读取时间信息?
handle/remove 收到纯时间戳信息的信息似乎让我很不舒服。
编辑: 当我使用 document.toJSON (我知道它已被弃用)时,我得到
"StartTime": {"$numberLong": "1549640550000"}
当我使用 document.toString() 我得到 TimeStamp=文档{StartTime=1549554150000}
您需要构建一个 JSON 可以将 NumberLong 转换为 Long 的序列化程序。您可以使用以下设置并将 Document.toJson() 作为参数传递并获得预期的输出。
JsonWriterSettings settings = JsonWriterSettings.builder()
.int64Converter((value, writer) -> writer.writeNumber(value.toString())).build();
document.toJson(settings); // The output would contain simple long value
这个对我有用。我在网上花了几个小时才弄明白。您可以尝试其中的任何一个。
# These 2 queries are equivalent
db.looks.find({ $and: [{ "version":"v2" }, { "styleid":NumberLong("123456789") }]}).count()
db.looks.find({ "$and": [{ "version":"v2" }, { "styleid":{"$eq":123456789} }]}).count()
db.looks.find({ "$and": [{ "version":"v2" }, { "styleid":{"$in":[123456789]} }]}).count()
# Java Code
Criteria criteria = new Criteria();
criteria.andOperator(
Criteria.where(Constants.VERSION).is(Constants.V2),
Criteria.where(Constants.STYLEID).in(Lists.newArrayList(looksRequestV2.getStyleId().intValue()))
// Criteria.where(Constants.STYLEID).is(looksRequestV2.getStyleId().intValue())
// Criteria.where(Constants.STYLEID).is(looksRequestV2.getStyleId())
);