首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mongodb IsoDate及其在微服务方面的问题

Mongodb IsoDate及其在微服务方面的问题
EN

Stack Overflow用户
提问于 2016-12-02 13:00:42
回答 1查看 780关注 0票数 3

当我使用spring数据在我的MongoDB上插入文档时,我执行以下操作:

代码语言:javascript
复制
Update update = new Update();
update.currentDate("lastModified");
mongoTemplate.upsert(query, update, MyDocument.class);

我使用的是currentDate of MongoDB,因为我想用MongoDB数据库所在的日期保存MyDocument上一次修改的日期。

基于等级库

如果-修改-自请求-头字段与一种方法一起使用,以使其具有条件:如果请求的变量自该字段中指定的时间以来未被修改,则实体将不会从服务器返回;相反,将返回304 (未修改)响应,而不带任何消息体。

因此,保存此日期的目的是验证是否基于接收日期修改了MyDocument。

因此,当我执行更新时,将在数据库上创建以下IsoDate:

代码语言:javascript
复制
ISODate("2016-12-02T12:11:33.083Z")

因此,当客户想知道文档是否已更改时,他们会将日期发回给我,然后我在数据库上查询:

代码语言:javascript
复制
    Query query = new Query(where("id").is(filter.getId()));
    Criteria criteria = Criteria.where("lastModified").gt(filter.getLastModified());
    query.addCriteria(criteria);
    return mongoTemplate.findOne(query, MyDocument.class);

这是完美的,除了一个问题:规范说标头如果-修改-因为有以下格式:

如果-修改-自: Sat,1994年10月29日19:43:31格林尼治时间

这意味着毫秒不会传递给如果修改的-自标头。但是,MongoDB IsoDate用毫秒保存当前日期。因此,当两个日期完全相同时,查询将不会返回304未修改,但它将返回整个资源,因为查询如下:

代码语言:javascript
复制
{ "id" : 123, "lastModified" : { "$gt" : { $java : 2016-12-02T12:11:39.000Z } } }

由于客户端不发送毫秒,所以java将毫秒设为零( 2016-12-02T12:11:39.000Z),,这意味着我的数据库上的日期大于客户机发送的日期:

2016-12-02T12:11:33.083Z > 2016-12-02T12:11:39.000Z

因为有83毫秒。

最后一个问题是:解决这个问题的正确方法是什么,并正确地工作在如果修改了的规范中--因为建议?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-02 14:39:12

您可以在比较之前将最后修改的日期millis设置为最大毫秒,这在技术上将抵消毫秒偏移。

代码语言:javascript
复制
public static Date setMaxMillis(Date day,Calendar cal) {
    cal.setTime(day);
    cal.set(Calendar.MILLISECOND, cal.getMaximum(Calendar.MILLISECOND));
    return cal.getTime();
}

Query query = new Query(where("id").is(filter.getId()));
Criteria criteria = Criteria.where("lastModified").gt(setMaxMillis(filter.getLastModified(),Calendar.getInstance()));
query.addCriteria(criteria);
return mongoTemplate.findOne(query, MyDocument.class);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40932850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档