Java Mongo:计算集合中每个项的数组元素数
日期示例(收藏名称“人物”) 目标:获取每个人文档的“合作”条目总数(累计总数) 预期结果5 我尝试过的Java Mongo:计算集合中每个项的数组元素数,java,mongodb,mongodb-query,Java,Mongodb,Mongodb Query,日期示例(收藏名称“人物”) 目标:获取每个人文档的“合作”条目总数(累计总数) 预期结果5 我尝试过的 public int getTotalCoordinateCount(){ BasicDbObject project= new BasicDBObject() .append("count",new BasicDBObject("$size","coords")) AggregationOutput output = db.getPeopleCollection().ag
public int getTotalCoordinateCount(){
BasicDbObject project= new BasicDBObject()
.append("count",new BasicDBObject("$size","coords"))
AggregationOutput output = db.getPeopleCollection().aggregate(Arrays. <DBObject>asList(
new BasicDBObject("$project", project);
BasicDbObject result = (BasicDBObject)output.results().iterator.next();
return result.getInt("count");
}
public int getTotalCoordinationCount(){
BasicDbObject项目=新的BasicDbObject()
.append(“count”,新的BasicDBObject(“$size”,“coords”))
AggregationOutput输出=db.getPeopleCollection().aggregate(Arrays.asList(
新的基本项目(“$project”,项目);
BasicDbObject结果=(BasicDbObject)output.results().iterator.next();
返回结果.getInt(“计数”);
}
问题我得到:2
我不知道我在mongo聚合框架中做错了什么。我怀疑我需要包含一个
$sum
,但不确定您需要在聚合管道中的coords
字段上执行展开操作的位置。然后,使用count
字段按Null
分组,以计算结果集和y您将从所有文档的所有数组中获取元素总数。public int getTotalCoordinationCount(){
public int getTotalCoordinateCount(){
BasicDbObject group = new BasicDBObject()
.append("_id", 1)
.append("count", new BasicDBObject("$sum", 1));
BasicDbObject project= new BasicDBObject()
.append("_id", 0)
.append("count", 1);
AggregationOutput output = db.getPeopleCollection().aggregate(Arrays. <DBObject>asList(
new BasicDBObject("$unwind", "coords"),
new BasicDBObject("$group", group),
new BasicDBObject("$project", project)
);
BasicDbObject result = (BasicDBObject)output.results().iterator.next();
return result.getInt("count");
}
BasicDbObject组=新的BasicDbObject()
.append(“\u id”,1)
.append(“count”,新的BasicDBObject(“$sum”,1));
BasicDbObject项目=新的BasicDbObject()
.append(“\u id”,0)
.附加(“计数”,1);
AggregationOutput输出=db.getPeopleCollection().aggregate(Arrays.asList(
新的BasicDBObject(“$unwind”,“coords”),
新的BasicDBObject(“$group”,group),
新BasicDBObject(“$project”,项目)
);
BasicDbObject结果=(BasicDbObject)output.results().iterator.next();
返回结果.getInt(“计数”);
}
你能演示一下这会是什么样子吗?如果JSON格式更容易生成答案,你可以保留JSON格式。我不能用Java编写,但基本上你需要解开这个列表,这样你就会有x个文档,x是你的数字。看我的答案,我试着用Java为你写。@serigu谢谢,解开是你需要做的事情他失踪了
public int getTotalCoordinateCount(){
BasicDbObject group = new BasicDBObject()
.append("_id", 1)
.append("count", new BasicDBObject("$sum", 1));
BasicDbObject project= new BasicDBObject()
.append("_id", 0)
.append("count", 1);
AggregationOutput output = db.getPeopleCollection().aggregate(Arrays. <DBObject>asList(
new BasicDBObject("$unwind", "coords"),
new BasicDBObject("$group", group),
new BasicDBObject("$project", project)
);
BasicDbObject result = (BasicDBObject)output.results().iterator.next();
return result.getInt("count");
}