1

目前,我正在开发一个我从/向客户Java/Spring App保存和提供的地方。JSON

我以毫秒为单位将我的日期信息存储为 Unix 时间戳。现在 MongoDB 自动将其存储为

"StartTime": {"$numberLong": "1549640550000"}

当我插入

"StartTime": 1549640550000

我还读到,当我使用该格式时,会发生这种情况$Date而不是 $numberLong 。iso8601

是否可以在我的查询结果中没有此包装信息的情况下从 MongoDB 读取时间信息?

处理/删除接收普通时间戳信息的信息对我来说似乎很不舒服。

编辑:当我使用 document.toJSON (我知道它已被弃用)时,我得到

"StartTime": {"$numberLong": "1549640550000"}

当我使用 document.toString() 我得到 TimeStamp=Document{StartTime=1549554150000}

4

2 回答 2

1

您需要构建一个可以将 NumberLong 转换为 Long 的 JSON 序列化程序。您可以使用以下设置并将 Document.toJson() 作为参数传入并获得预期的输出。

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

document.toJson(settings); // The output would contain simple long value
于 2019-07-30T14:55:04.800 回答
0

这个对我有用。我在互联网上花了几个小时后才弄清楚。您可以尝试其中任何一种。

# 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())
);
于 2020-04-12T08:55:26.407 回答