通过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的主要内容,如果未能解决你的问题,请参考以下文章

插入时在 MongoDB 中自动填充日期

如何遍历Java中的日期范围?

如何使用Java从mongodb获取最后插入的N条记录?

如何使用Java从mongodb获取最后插入的N条记录?

如何在 javascript 中获取当前日期减去 20 秒?

怎么在java中获得mongodb分组group的结果中的总数量