注册

java操作mongodb基础(查询 排序 输出list)

Java操作MongoDB基础

目录

  • MongoDB入门
  • Java连接MongoDB
  • MongoDB查询操作
  • 查询所有记录
  • 条件查询
  • 多条件查询
  • 分页查询
  • MongoDB排序操作
  • 正序排序
  • 倒序排序
  • Java输出MongoDB查询结果为List

MongoDB入门

MongoDB是一种基于文档的、面向文档的NoSQL数据库管理系统。与传统的关系型数据库相比,MongoDB有更高的灵活性和可伸缩性。

MongoDB将数据存储在BSON格式的文档中,每个文档类似于关系型数据库中的一行数据。MongoDB使用类似JSON的语法来查询文档,并提供了多种方式进行查询和操作。

Java连接MongoDB

在Java程序中连接MongoDB,需要下载mongodb-java-driver.jar,然后通过Java代码进行连接。

public class MongoDB {

    public static void main(String[] args) {

        MongoClient mongoClient = new MongoClient("localhost", 27017);
        MongoDatabase mongoDatabase = mongoClient.getDatabase("test");

        System.out.println("Connect to database successfully");

        mongoClient.close();
    }

}

上述代码中,首先创建一个MongoClient对象,参数为MongoDB所在的服务器IP和端口号。然后调用MongoClient对象的getDatabase方法,获取指定的数据库名称。

MongoDB查询操作

查询所有记录

查询所有MongoDB中的记录,可以使用find()方法。

public class MongoDB {

    public static void main(String[] args) {

        MongoClient mongoClient = new MongoClient("localhost", 27017);
        MongoDatabase mongoDatabase = mongoClient.getDatabase("test");
        MongoCollection collection = mongoDatabase.getCollection("user");

        System.out.println("Collection sampleCollection selected successfully");

        FindIterable cursor = collection.find();

        for (Document doc : cursor) {
            System.out.println(doc.toJson());
        }

        mongoClient.close();
    }

}

上述代码中,首先创建一个MongoCollection对象,参数为要查询的集合名称。然后调用MongoCollection对象的find()方法,获取所有记录。最后通过for循环遍历所有记录,使用toJson()方法输出每条记录。

条件查询

查询符合指定条件的记录,可以使用Filters类中的方法作为参数,传递给find()方法。

public class MongoDB {

    public static void main(String[] args) {

        MongoClient mongoClient = new MongoClient("localhost", 27017);
        MongoDatabase mongoDatabase = mongoClient.getDatabase("test");
        MongoCollection collection = mongoDatabase.getCollection("user");

        System.out.println("Collection sampleCollection selected successfully");

        FindIterable cursor = 
             collection.find(Filters.eq("age", 20));

        for (Document doc : cursor) {
            System.out.println(doc.toJson());
        }

        mongoClient.close();
    }

}

上述代码中,使用Filters.eq("age", 20)表示查询age等于20的记录。

多条件查询

查询符合多个条件的记录,可以使用Filters类的多个方法组合。

public class MongoDB {

    public static void main(String[] args) {

        MongoClient mongoClient = new MongoClient("localhost", 27017);
        MongoDatabase mongoDatabase = mongoClient.getDatabase("test");
        MongoCollection collection = mongoDatabase.getCollection("user");

        System.out.println("Collection sampleCollection selected successfully");

        FindIterable cursor = 
             collection.find(
                 Filters.and(
                     Filters.eq("age", 20), 
                     Filters.eq("gender", "male")
                 )
             );

        for (Document doc : cursor) {
            System.out.println(doc.toJson());
        }

        mongoClient.close();
    }

}

上述代码中,使用Filters.and方法将多个查询条件进行组合。

分页查询

MongoDB中的分页查询,可以使用skip()和limit()方法。

public class MongoDB {

    public static void main(String[] args) {

        MongoClient mongoClient = new MongoClient("localhost", 27017);
        MongoDatabase mongoDatabase = mongoClient.getDatabase("test");
        MongoCollection collection = mongoDatabase.getCollection("user");

        System.out.println("Collection sampleCollection selected successfully");

        int pageNo = 2;
        int pageSize = 3;

        List list = collection
             .find()
             .skip((pageNo - 1) * pageSize)
             .limit(pageSize)
             .into(new ArrayList<>());

        for (Document doc : list) {
            System.out.println(doc.toJson());
        }

        mongoClient.close();
    }

}

上述代码中,首先定义分页查询的页码pageNo和每页数据量pageSize。然后使用skip()方法跳过(pageNo - 1) * pageSize条数据,使用limit()方法获取pageSize条数据。最后使用into()方法将查询结果转换为List类型,方便输出。

MongoDB排序操作

正序排序

MongoDB中的排序操作,可以使用sort()方法。

public class MongoDB {

    public static void main(String[] args) {

        MongoClient mongoClient = new MongoClient("localhost", 27017);
        MongoDatabase mongoDatabase = mongoClient.getDatabase("test");
        MongoCollection collection = mongoDatabase.getCollection("user");

        System.out.println("Collection sampleCollection selected successfully");

        FindIterable cursor = 
             collection.find()
                       .sort(Sorts.ascending("age"));

        for (Document doc : cursor) {
            System.out.println(doc.toJson());
        }

        mongoClient.close();
    }

}

上述代码中,使用Sorts.ascending("age")表示按age字段的正序排序。默认情况下,sort()方法默认按照升序排序。

倒序排序

倒序排序,可以使用Sorts.descending()方法。

public class MongoDB {

    public static void main(String[] args) {

        MongoClient mongoClient = new MongoClient("localhost", 27017);
        MongoDatabase mongoDatabase = mongoClient.getDatabase("test");
        MongoCollection collection = mongoDatabase.getCollection("user");

        System.out.println("Collection sampleCollection selected successfully");

        FindIterable cursor = 
             collection.find()
                       .sort(Sorts.descending("age"));

        for (Document doc : cursor) {
            System.out.println(doc.toJson());
        }

        mongoClient.close();
    }

}

上述代码中,使用Sorts.descending("age")表示按age字段的倒序排序。

Java输出MongoDB查询结果为List

将MongoDB中查询的结果输出为List,可以使用into()方法。

public class MongoDB {

    public static void main(String[] args) {

        MongoClient mongoClient = new MongoClient("localhost", 27017);
        MongoDatabase mongoDatabase = mongoClient.getDatabase("test");
        MongoCollection collection = mongoDatabase.getCollection("user");

        System.out.println("Collection sampleCollection selected successfully");

        List list = collection.find().into(new ArrayList<>());

        for (Document doc : list) {
            System.out.println(doc.toJson());
        }

        mongoClient.close();
    }

}

上述代码中,使用into()方法将查询结果转换为List类型,方便输出。