以内存高效的方式计算MongoDB(Java驱动程序)中的唯一对象
我试图计算集合中唯一对象的数量。我的方法包括获取唯一对象的列表并调用.size()。。。当存在大量对象时,这会导致内存问题。你知道更好的方法吗 以下是我正在做的:以内存高效的方式计算MongoDB(Java驱动程序)中的唯一对象,java,mongodb,Java,Mongodb,我试图计算集合中唯一对象的数量。我的方法包括获取唯一对象的列表并调用.size()。。。当存在大量对象时,这会导致内存问题。你知道更好的方法吗 以下是我正在做的: // note DBConfig.getMongoUrl() returns a String with the URL public static int countUniqueProductsByKeyAndCode(String cKey, String cCode){ List<Product> prod
// 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();
}
//注意DBConfig.getMongoUrl()返回一个带有URL的字符串
公共静态int countUniqueProductsByKeyAndCode(字符串cKey,字符串cCode){
List prods=new ArrayList();
试一试{
MongoURI MongoURI=新的MongoURI(DBConfig.getMongoUrl());
DBCollection collection=mongoURI.connectDB().getCollection(“产品”);
DBObject query=newBasicDBObject(“cKey”,cKey);
查询.放置(“cCode”,cCode);
prods=collection.distinct(“名称”,查询);
}捕获(例外e){
p、 rint(e);
}
返回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的版本,将计数替换为以下组
DBObject countd = new BasicDBObject("_id", null).append("count", new BasicDBObject("$sum", 1));
DBObject count = new BasicDBObject("$group", countd);
谢谢,看来我得升级我的MongoDBNp了。我添加了旧版本的版本投诉。更新mongodb服务器时也要更新mongodb java驱动程序。您好,当我在本地测试时,代码挂起,我已将DB和库升级到3.4-旧代码确实有效,因此升级似乎成功。现在尝试旧版本的代码(可能升级出了问题)将尝试几种不同的方法-当推送到服务器时,可能会起作用。