统计在 MongoDB 的 Java 代码中,在执行 $group 之前的 $match 记录数量。

huangapple go评论82阅读模式
英文:

count the number of record by $match before $group java mongoDB

问题

我已经使用聚合功能从MongoDB中获取记录。在Java中,在进行分组(MongoDB)之前,我需要计算$match返回的记录数。任何帮助都将不胜感激。

以下是您提供的代码部分:

List countries = col2.distinct("country");
for (int i = 0; i < countries.size(); i++) {
    String country1 = (String) countries.get(i);
    List<DBObject> pipeline = new ArrayList<DBObject>(Arrays.asList(
        new BasicDBObject("$match", new BasicDBObject("country", country1)),
        new BasicDBObject("$group",
            new BasicDBObject("_id", "$job_id")
                .append("count", new BasicDBObject("$sum", 1))
        ))));
    AggregationOutput output = col2.aggregate(pipeline);
}

这是一个示例数据:
统计在 MongoDB 的 Java 代码中,在执行 $group 之前的 $match 记录数量。

英文:

I have used aggregation for fetching records from MongoDB. I need to count the number of records return by $match before I do the groupBy (MongoDB) in java. Any help will be appreciated.

             List countries =col2.distinct(&quot;country&quot;);
             for(int i=0;i&lt;countries.size();i++){
                String country1= (String) countries.get(i);
                List&lt;DBObject&gt; pipeline = new ArrayList&lt;DBObject&gt;(Arrays.asList( 
                    new BasicDBObject(&quot;$match&quot;,new BasicDBObject(&quot;country&quot;, country1)),
                    new BasicDBObject(&quot;$group&quot;, 
                        new BasicDBObject(&quot;_id&quot;,&quot;$job_id&quot; )
                          .append(&quot;count&quot;, new BasicDBObject(&quot;$sum&quot;,1)
                    ))));
                 AggregationOutput output = col2.aggregate(pipeline);}

This is a sample data:
统计在 MongoDB 的 Java 代码中,在执行 $group 之前的 $match 记录数量。

答案1

得分: 0

你需要进行自动装配

@Autowired
MongoTemplate mongoTemplate;

然后是将其转换为Java中的Mongo脚本

public List<Object> test(){
    Aggregation aggregation = Aggregation.newAggregation(
        
        match(Criteria.where("country").is("us")),
        group(null)
            .push("$$ROOT").as("data")
            .count().as("count")
        
    
    ).withOptions(AggregationOptions.builder().allowDiskUse(Boolean.TRUE).build());

    return mongoTemplate.aggregate(aggregation, mongoTemplate.getCollectionName(YOUR_COLLECTION.class), Object.class).getMappedResults();
}

我还没有测试过它,但希望这应该能够工作。

工作中的Mongo playground

英文:

You need to autowire

@Autowired
MongoTemplate mongoTemplate;

Then the converted mongo script in java

public List&lt;Object&gt; test(){
	Aggregation aggregation = Aggregation.newAggregation(
		
		match(Criteria.where(&quot;country&quot;).is(&quot;us&quot;)),
		group(null)
			.push(&quot;$$ROOT&quot;).as(&quot;data&quot;)
			.count().as(&quot;count&quot;)
		

	).withOptions(AggregationOptions.builder().allowDiskUse(Boolean.TRUE).build());

	return mongoTemplate.aggregate(aggregation, mongoTemplate.getCollectionName(YOUR_COLLECTION.class), Object.class).getMappedResults();
}

I haven't tested it, but hope, this should work.

Working Mongo playground

huangapple
  • 本文由 发表于 2020年9月25日 04:48:26
  • 转载请务必保留本文链接:https://go.coder-hub.com/64054188.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定