Java连接MongoDB进行查询、排序及列表输出

Felix
Felix
发布时间:2026-10-14 | 3人浏览过
原创

在Java后端开发中,经常需要与MongoDB数据库进行交互。本文详细演示如何使用Java Legacy Driver连接MongoDB,实现带条件的查询、按时间倒序排列以及将结果集转换为List对象的核心操作。

环境准备与依赖

为了实现上述功能,需确保项目中引入了MongoDB Java Driver的依赖(如Maven坐标)。

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.x.x</version> <!-- 请使用当前稳定版本 -->
</dependency>

核心代码实现

以下示例展示了完整的操作流程,包括连接建立、条件构造、查询执行及结果处理。

package com.infomorrow.webroot;

import java.util.List;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;

public class TestMongoDB {
    public static void main(String args[]) throws Exception {
        // 1. 建立连接
        MongoClient mongoClient = new MongoClient("127.0.0.1", 27017);
        
        // 2. 指定数据库和集合
        DB db = mongoClient.getDB("credit_2");
        DBCollection collection = db.getCollection("report");

        // 3. 构建查询条件
        BasicDBObject filter = new BasicDBObject();
        // 注意:MongoDB区分数据类型,"3" (String) != 3 (Integer)
        filter.put("user_id", "10065716153075");

        // 4. 执行查询:添加limit限制和sort排序
        // sort(new BasicDBObject("field_name", -1)) -1表示倒序,1表示正序
        DBCursor cursor = collection.find(filter)
                  .limit(10)
                  .sort(new BasicDBObject("create_time", -1));

        // 5. 将结果转换为List
        List<DBObject> list = cursor.toArray();
        System.out.println("结果数量: " + list.size());
        
        // 注意:cursor.count()在不执行完迭代前可能不准确,建议用list.size()
        // 若需总数且未应用limit影响统计,可使用collection.count(filter)

        // 6. 遍历结果集(可选,因为已转为List)
        while(cursor.hasNext()) {
             System.out.println(cursor.next());
        }
    }
}

关键步骤解析

第1步:连接数据库与定位集合

目的:建立与MongoDB服务器的通信通道,并锁定目标数据表。

操作:实例化 MongoClient 时传入主机IP和端口(默认27017)。随后通过 getDB() 获取数据库对象,再通过 getCollection() 获取集合对象。

第2步:构建查询过滤器

目的:定义检索数据的条件规则。

操作:使用 BasicDBObject 创建键值对。例如 put("user_id", "value")。

注意:MongoDB是强类型存储,JSON/BSON数据中的数字与字符串严格区分。如果数据库字段存的是整数,查询时必须传整数类型,否则无法匹配。

第3步:执行链式查询

目的:优化数据传输,仅获取必要的子集。

操作:调用 find() 后,可链接 limit(int) 限制返回文档数,以及 sort(BasicDBObject) 指定排序字段和方向(-1为降序/倒序,1为升序/正序)。

第4步:结果集转换与遍历

目的:便于在Java内存中进一步处理数据。

操作: toArray() 会将游标中的数据加载到List中。对于大数据量场景,直接使用 while(cursor.hasNext()) 逐个读取以节省内存;对于小数据量,转List更方便进行流式操作或迭代。

常见问题排查

  • 查询无结果:检查查询条件中的数据类型是否与存储一致(最常见错误),确认字段名拼写无误。
  • 游标关闭:确保在不再使用 DBCursor 时调用 cursor.close(),或者使用 toArray() 后不再复用该游标,以防资源泄漏。
  • 排序失效:确认 sort 方法放置在 find 之后,且字段存在于文档结构中。

以上就是Java连接MongoDB进行查询、排序及列表输出的详细内容,更多关于Java数据库操作的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表