gpt4 book ai didi

java - 使用 MongoDB 3.0 Java 驱动程序计算结果

转载 作者:可可西里 更新时间:2023-11-01 10:00:35 24 4
gpt4 key购买 nike

我只想获取某些查询的结果数。具体来说,我想知道过去 15 分钟内有多少用户在线。所以,我设置了连接:

mongoClient = new MongoClient("localhost", 3001);
database = mongoClient.getDatabase("database1");

然后在我的方法中我获取集合并发送查询...:

MongoCollection<Document> users = database.getCollection("users");
users.find(and(gte("lastlogin",xvminago),lte("lastlogin",now)

我什至不确定最后一步是否正确。但是在 Javascript 和我在 Java 中找不到的这个 .count() 操作中似乎很容易。而且文档很奇怪,而且不知何故全都不同。 (我使用的是 MongoDB Java Driver 3.0)

最佳答案

使用 MongoCollection 的 count() 方法,应用查询过滤器,该过滤器使用 Joda-Time 中的 Datetime 对象 简化 java 中日期操作的库。您可以查看 here 。基本上创建一个距离当前时间 15 分钟的日期时间对象:

DateTime dt = new DateTime();
DateTime now = new DateTime();
DateTime subtracted = dt.minusMinutes(15);

然后使用变量构造一个日期范围查询以供在 count() 方法中使用:

Document query = new Document("lastlogin", new Document("$gte", subtracted).append("$lte", now));
mongoClient = new MongoClient("localhost", 3001);
long count = mongoClient.getDatabase("database1")
.getCollection("users")
.count(query);

在分片集群上,底层 db.collection.count() 如果存在孤立文档或正在进行 block 迁移,则方法可能会导致计数不准确。所以使用 aggregate() 更安全 方法代替:

Iterator<Document> it = mongoClient.getDatabase("database1")
.getCollection("users")
.aggregate(Arrays.asList(
new Document("$match", new Document("lastlogin",
new Document("$gte", subtracted).append("$lte", now))
),
new Document("$group", new Document("_id", null)
.append("count",
new Document("$sum", 1)
)
)
)
).iterator();
int count = it.hasNext() ? (Integer)it.next().get("count") : 0;

关于java - 使用 MongoDB 3.0 Java 驱动程序计算结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33465921/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com