java中mongodb常用的aggregate聚合查询操作

本文分享了在项目中使用MongoDB的心得,详细介绍了如何进行数据查询与聚合操作,包括match、group、sort等功能的使用,以及如何实现分页查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      最近因为项目需要,用到了MongoDB,之前只用过关系型数据库,第一次项目中用到,有一点点心得和收获,记录一下。

MongoDB 是一种文档型数据库,里面分为数据库(DBs)和集合(Collections),分别相当于SQL的数据库和数据表。数据

因为本次业务原因,做的都是查询操作,没有增删改等操作。(比较简单,看下就会了,哈哈)

           SQL                                              MongoDB

       

需要注意的是,MongoDB有一个管道的概念,相当于一层一层的过滤,顺序不能乱,否则会报错(A pipeline stage specification object must contain exactly obe field)。这其实和我们在用sql语句查询时候是一样的,都是select.....where....group by....order by....limit...顺序不能乱是一样的。

// match(相当于 WHERE 或者 HAVING )
BasicDBObject query= new BasicDBObject();
BasicDBObject[] array = { new BasicDBObject("time", new BasicDBObject("$gte", "2018-09-12")),new BasicDBObject("time", new BasicDBObject("$lte","2018-12-25"))};
query.append("$and", array);
BasicDBObject match = new BasicDBObject("$match", query); 

//group(相当于 GROUP BY)
BasicDBObject group = new BasicDBObject("$group", new BasicDBObject("_id", "$subject")
            .append("count", new BasicDBObject("$sum", 1)));

//sort(排序)
BasicDBObject sort = new BasicDBObject("$sort", new BasicDBObject("count", -1));//1:正序,-1倒序

//skip(跳过前面多少条数据,分页时使用)
//limt(只要前多少条数据,分页时使用)
BasicDBObject limit = new BasicDBObject("$limit", pageSize);
BasicDBObject skip = new BasicDBObject("$skip", (pageNo - 1) * pageSize);

//queryList集合里的顺序不能乱,否则会报错。

List<DBObject> queryList = new ArrayList<>();
queryList .add(match);
queryList .add(group);
queryList .add(sort);
queryList .add(skip);
queryList .add(limit);

AggregateIterable<Document> iterable = mongoClient.mongoClient.getDatabase(dbName).getCollection(gatherName).aggregate(queryList );

    上面的代码就是进行聚合后的操作,查询出的集合里有(_id,count)两个字段,_id对应的值就是subject,count对应的值是总数,这样我们就可以查出结果了,并且进行了分页操作,只需要传入相应pageNo和pageSize就可以了。

由于水平有限,有错误的地方请大家指正。

最后附上 MongoDB的官方API地址:https://docs.mongodb.com/manual/reference/sql-aggregation-comparison/

     

   

Java操作 MongoDB 进行聚合查询可以使用 MongoDBJava 驱动程序。下面是一个简单的示例代码,它演示了如何使用 Java 驱动程序执行 MongoDB 聚合查询: ```java import com.mongodb.MongoClient; import com.mongodb.client.AggregateIterable; import com.mongodb.client.MongoDatabase; import org.bson.Document; import java.util.Arrays; public class MongoDBAggregationExample { public static void main(String[] args) { // 创建 MongoDB 客户端 MongoClient mongoClient = new MongoClient("localhost", 27017); // 获取数据库 MongoDatabase database = mongoClient.getDatabase("test"); // 执行聚合查询 AggregateIterable<Document> result = database.getCollection("sales").aggregate(Arrays.asList( new Document("$group", new Document("_id", "$product").append("total", new Document("$sum", "$quantity"))), new Document("$sort", new Document("total", -1)) )); // 打印结果 for (Document doc : result) { System.out.println(doc.toJson()); } // 关闭客户端 mongoClient.close(); } } ``` 在这个示例中,我们创建了一个 `MongoClient` 对象来连接 MongoDB 数据库。然后,我们获取了 `test` 数据库,并对 `sales` 集合执行了一个聚合查询。这个聚合查询使用了 `$group` 和 `$sum` 操作符来计算每个产品的总销量,并使用 `$sort` 操作符按降序排列结果。最后,我们遍历了查询结果并打印了每个文档的 JSON 表示。 需要注意的是,聚合查询返回的结果是一个 `AggregateIterable<Document>` 对象,可以通过迭代器来遍历结果集合。在遍历结果时,可以使用 `toJson()` 方法将每个文档转换为 JSON 格式的字符串,或者使用 `get()` 方法获取文档中的字段值。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值