Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从java在mongo db中插入日期_Java_Mongodb_Datetime - Fatal编程技术网

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

如何从java在mongo db中插入日期,java,mongodb,datetime,Java,Mongodb,Datetime,有许多类似的问题。但与我面临的问题并不完全相似。我已经看到了它周围几乎所有的问题和答案 所以问题是 我必须在mongo集合中插入一个日期字段 但我无法直接访问收藏。我得用一种服务。该服务接受一个字符串并返回oid 因此,一旦我构建了BasicDBObject,我就调用toString并将其传递给我的服务。。我甚至试着将它直接插入测试集合,mongo对此表示不满 BasicDBObject document = new BasicDBObject(); long createdAtSi

有许多类似的问题。但与我面临的问题并不完全相似。我已经看到了它周围几乎所有的问题和答案

所以问题是

我必须在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使数字字段和包含数字的文本字段有所不同。后者仅被识别为
字符串
;我假设这就是你所做的,当你认为你是给你的服务作为一个整数的日期。遗憾的是,您没有向我们显示相关代码。

JSON使数字字段和包含数字的文本字段之间存在差异。后者仅被识别为
字符串
;我假设这就是你所做的,当你认为你是给你的服务作为一个整数的日期。很遗憾,您没有向我们显示相关代码。

当我将日期信息保存为非字符串格式时,我在DTO中对字段进行了如下注释。这有助于MongoDB了解该字段将被视为ISO日期,这将有助于进行范围搜索等

@DateTimeFormat(iso = ISO.DATE_TIME) private Date date;

当我将日期信息保存为非字符串格式时,我在DTO中对字段进行注释,如下所示。这有助于MongoDB了解该字段将被视为ISO日期,这将有助于进行范围搜索等

@DateTimeFormat(iso = ISO.DATE_TIME) private Date date;

创建您想要的确切JSON对象,而不必经过
BasicDBObject
?或者解析JSON序列化并用时间戳替换任何
$date
字段?创建所需的确切JSON对象,而无需通过
BasicDBObject
?或者解析JSON序列化并用时间戳替换任何
$date
字段?