gpt4 book ai didi

java - 以内存有效的方式计算 MongoDB(Java 驱动程序)中的唯一对象

转载 作者:行者123 更新时间:2023-12-02 11:31:19 24 4
gpt4 key购买 nike

我正在尝试计算集合中唯一对象的数量。我的方法涉及获取唯一对象的列表并调用 .size() ...当存在大量对象时,这会导致内存问题。你知道更好的方法吗?

这就是我正在做的事情:

// note DBConfig.getMongoUrl() returns a String with the URL

public static int countUniqueProductsByKeyAndCode(String cKey, String cCode){
List<Product> prods = new ArrayList<>();
try {
MongoURI mongoURI = new MongoURI(DBConfig.getMongoUrl());
DBCollection collection = mongoURI.connectDB().getCollection("Product");
DBObject query = new BasicDBObject("cKey", cKey);
query.put("cCode", cCode);
prods = collection.distinct("name", query);
} catch(Exception e){
p.rint(e);
}
return prods.size();
}

最佳答案

您可以在 3.4 服务器上使用以下聚合。

public static int countUniqueProductsByKeyAndCode(String cKey, String cCode){
int size = 0;
try {
MongoURI mongoURI = new MongoURI(DBConfig.getMongoUrl());
DBCollection collection = mongoURI.connectDB().getCollection("Product");
DBObject query = new BasicDBObject("cKey", cKey);
query.put("cCode", cCode);
DBObject match = new BasicDBObject("$match", query);
DBObject id = new BasicDBObject("_id", "$name");
DBObject group = new BasicDBObject("$group", id);
DBObject count = new BasicDBObject("$count", "count");
AggregationOutput output = collection.aggregate(Arrays.asList(match, group, count));
size = (int) output.results().iterator().next().get("count");
} catch(Exception e){
p.rint(e);
}
return size;
}

对于低于 3.4 的版本,将 count 替换为以下组

 DBObject countd = new BasicDBObject("_id", null).append("count", new BasicDBObject("$sum", 1));
DBObject count = new BasicDBObject("$group", countd);

关于java - 以内存有效的方式计算 MongoDB(Java 驱动程序)中的唯一对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49283757/

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