java - 如何从java在mongo db中插入日期

标签 java mongodb datetime

类似的问题还有很多。但与我面临的问题并不完全相同。我几乎看过所有围绕它的问题和答案

所以问题是

我必须在我的 mongo 集合中插入一个日期字段

但我无法直接访问该集合。我必须使用一项服务。该服务接受一个字符串并返回给我 oid。

因此,一旦我构造了 BasicDBObject,我就对其调用 toString 并将其传递给我的服务。我什至尝试将其直接插入到测试集合中,但 mongo 正在提示。

 BasicDBObject document = new BasicDBObject(); 
    long createdAtSinceEpoch = 0;
    long expiresAtSinceEpoch = 0;

    createdAtSinceEpoch = System.nanoTime();
    Date createdAt = new Date(TimeUnit.NANOSECONDS.toMillis(createdAtSinceEpoch));
    document.append("createdAt", createdAt);

    expiresAtSinceEpoch = createdAtSinceEpoch + +TimeUnit.SECONDS.toNanos(30);
    Date expiresAt = new Date(TimeUnit.NANOSECONDS.toMillis(expiresAtSinceEpoch));
document.append("expiresAt", expiresAt);
service.storeRecord(document.toString());

生成的 JSON 字符串如下所示

{
"createdAt": {
    "$date": "2015-09-01T20:05:21.641Z"
},
"expiresAt": {
    "$date": "2015-09-01T20:05:51.641Z"
}

Mongo 提示说

Unable to parse JSON : Date expecting integer milliseconds, at (3,17)

因此,如果我在 document.append() 方法中单独传递毫秒而不是日期对象,那么它不会将此字段识别为日期,并将其视为字符串,而是插入到集合中

我需要两件事

1) 我想要插入数据 2)我计划通过向 expiresAt 字段添加索引来使该行过期。所以我想让 mongo 认识到它是一个日期字段

最佳答案

JSON 区分数字字段和包含数字的文本字段。后一个仅被识别为String;我假设这就是您在为服务提供整数日期时所做的事情。不幸的是,您没有向我们展示相关代码。

关于java - 如何从java在mongo db中插入日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32340329/

相关文章:

javascript - Mongoose:如何捕获由异步回调引起的 MongoError

asp.net-mvc - ASP.NET MVC - Razor View 中的本地时间是在客户端还是服务器上计算的?

Java,如何使用将字符串和整数添加到数组中

java - 你曾经在任何项目中使用过 PhantomReference 吗?

java - 这段Java代码会泄漏内存吗?

java - 依赖默认字段初始化-编程风格不好吗?

regex - Mongo查询语法错误

javascript - Meteor 的简单模式,不返回数字的方法

python - Azure 函数 (python) 将输出写入输出 blob 路径的动态命名

c# - 为什么这两种日期格式不同?