通过JAVA在mongodb中获取currentdate
Posted
技术标签:
【中文标题】通过JAVA在mongodb中获取currentdate【英文标题】:Getting currentdate in mongodb through JAVA 【发布时间】:2019-02-13 06:31:04 【问题描述】:我正在编写一个每 1 小时运行一次并连接到 mongodb 集合的进程。 CollectionA 中的文档具有关联的时间戳键。然后,该过程必须在我们之前获得的时间戳之后搜索插入到另一个集合 Collection B 中的所有新文档。
集合 A-(只有 1 个保存时间戳的文档网) _id:属性 时间戳:ISODate("2019-02-13T06:44:45.387Z")
集合 B-(有多个文档一直在更新) 但它没有时间戳字段。
我必须从集合 A 中选择“时间戳”并从集合 B 中检索在该时间戳之后添加的所有文档
【问题讨论】:
【参考方案1】:-
从 collectionA 中查找最后一个时间戳
将时间戳弹出到 fakeObjectId 中
用
_id: $gt: fakeObjectId
查询collectionB
这个想法来自this answer,objectId包含文档创建时间,所以我们可以弹出一个假的objectId作为查询过滤器。
下面的演示代码:
public class MongoTest
public static void main(String[] args)
MongoClient client = MongoClients.create();
MongoDatabase testDb = client.getDatabase("test");
MongoCollection<Document> collectionA = testDb.getCollection("test");
MongoCollection<Document> collectionB = testDb.getCollection("runoob");
Document first = collectionA.find().first();
Date lastOptTime = first.getDate("lastOptTime");
ObjectId fakeObjectId = objectIdFromDate(lastOptTime);
FindIterable<Document> documents =
collectionB.find(Filters.gte("_id", fakeObjectId));
for (Document document : documents)
System.out.println(document);
public static ObjectId objectIdFromDate(Date date)
long second = date.getTime() / 1000;
return new ObjectId(String.format("%02x", second) + "0000000000000000");
【讨论】:
嘿,collectionB.find(Filters.gte("_id", fakeObjectId));
行给我错误提示 “类型 DBCollection 中的方法 find(DBObject) 不适用于参数 (Bson)”
@VishalRoy 您使用哪个版本的 mongo 客户端?我的是 mongodb-driver-sync 3.10.1 。也许旧版本有不同的api。
我正在使用 mongo-java-driver-3.8.2
@VishalRoy mongo-java-driver-3.8.2 也适用于我。
是的,它现在对我有用。我使用的是弃用的 db 而不是 MongoDatabase。但是我的 CollectionA 有多个文档。如何使用 where _id:"abc" 之类的条件进行搜索?【参考方案2】:
您可以使用findByCreatedAtGreaterThan(LocalDateTime oneHourLessFromNow )
查找您的数据,其中时间比现在少一小时。
您可以使用以下代码计算减少一小时的时间。
LocalDateTime oneHourLessFromNow = LocalDateTime.now().minusHours(1);
【讨论】:
以上是关于通过JAVA在mongodb中获取currentdate的主要内容,如果未能解决你的问题,请参考以下文章