Java-MongoDB-API

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: Java-MongoDB-API

0、前置工作

创建Maven工程,导入依赖:

<dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
            <version>3.12.7</version>
        </dependency>

1、连接MongoDB并测试

注意:确保已经启动MongoDB,最好是把MongoDB设置为自启程序。

//连接MongoDB服务器,自带连接池效果
        MongoClient mongoClient = MongoClients.create("mongodb://127.0.0.1:27017");
        //获取数据库,如果数据库不存在,为该数据库存储数据时自动创建数据库。
        MongoDatabase database = mongoClient.getDatabase("test");
        //获取集合,如果集合不存在,首次存储数据时,自动创建集合
        MongoCollection<Document> collection = database.getCollection("teachers");
        //获取数据,获取集合中第一个文档,并转为json打印
        System.out.println(collection.find().first().toJson());    //测试
        //关闭客户端
        if (mongoClient != null){
            mongoClient.close();
        }

如果有用户名和密码的话,连接的地址应该修改为:

mongodb://username:password@host/?authSource=admin

2、Java 操作集合

2.1、创建集合

创建集合有多种方式:创建普通的集合,创建固定大小的集合(capped)、创建带校验规则的集合:

1、创建普通集合

/**
     * 创建无限定集合
     * @param name 集合名称
     */
    public void createCollection(String name){
        database.createCollection(name);
    }

2、创建固定大小的集合

/**
     * 创建固定大小的集合
     * @param name 集合名称
     * @param size 集合大小
     */
    public void createCollection(String name,long size){
        database.createCollection(name,new CreateCollectionOptions().capped(true).sizeInBytes(size));
    }

3、创建带校验规则的集合

 /**
     * 创建带校验规则的集合
     * 在插入文档时必须存在两个字段:existsFiledName1和existsFiledName2
     * @param name 集合名称
     * @param existsFiledName1 字段1
     * @param existsFiledName2 字段2
     */
    public void createCollectionWithFilter(String name,String existsFiledName1,String existsFiledName2){
        ValidationOptions validationOptions = new ValidationOptions().validator(
                Filters.or(Filters.exists(existsFiledName1), Filters.exists(existsFiledName2))
        );
        database.createCollection(name,new CreateCollectionOptions().validationOptions(validationOptions));
    }

2.2、获取集合

 public MongoCollection<Document> getCollection(String name){
        return database.getCollection(name);
    }

2.3、删除集合

/**
     * 删除集合
     */
    public void dropCollection(String collectionName){
        MongoCollection<Document> collection = getCollection(collectionName);
        collection.drop();
    }

3、Java 操作文档

3.1、插入单个文档

/**
     * 插入一个文档
     * 创建一个文档对象,参数可以接收键值对,也可以直接接收一个Map对象
     * 文档对象的本质是BSON类型,还类型对应java中的Map,BSON数组对应Java中的List
     * Document.append(String key,Object value);    键指的是字段名 值可以是字符串可以是Document对象或者List数组
     */
    public void insertDocument(String collectionName,Map<String,Object> map){
        Document doc = new Document();
        for (String key : map.keySet()) {
            doc.append(key,map.get(key));
        }
        MongoCollection<Document> collection = getCollection(collectionName);
        collection.insertOne(doc);
    }

3.2、插入多个文档

/**
     * 插入多个文档
     */
    public void insertDocuments(String collectionName,List<Document> documents){
        MongoCollection<Document> collection = getCollection(collectionName);
        collection.insertMany(documents);
    }

3.3、修改单个文档

这里用的是 Filters.eq() 相当于判断是否等于,如果有数值型的字段,可以用Filters.lt() 表示小于、Filters.gt() 表示大于...

 /**
     *
     * @param collectionName 集合名称
     * @param conditionFiledName 查询条件字段名
     * @param value 查询条件字段对应的值
     * @param updateList 更新后的字段键值对列表 注意:这里需要传入一个List<Document>集合,其中,Document对象的key应该为"$set",值为新的Document对象
     */
    public void updateDocument(String collectionName,String conditionFiledName,String value,List<Document> updateList){
        MongoCollection<Document> collection = getCollection(collectionName);
        collection.updateOne(Filters.eq(conditionFiledName,value),updateList);
    }

3.4、修改多个文档

//修改多个文档 所有订单数量<100的订单全部+1
        MongoCollection<Document> collection = getCollection("orders");
//给满足条件的订单的订单数目全部+100
        UpdateResult updateResult = collection.updateMany(Filters.eq("order_nums",100), Updates.inc("order_nums", 100));
        System.out.println(updateResult.getModifiedCount());

3.5、删除文档

 //删除单个条件文档
        MongoCollection<Document> collection = getCollection("orders");
        collection.deleteOne(Filters.eq("order_id","0003"));
//删除多个满足条件文档
collection.deleteOne(Filters.eq("order_num","100"));

4、Java 查询文档

4.1、查询所有文档

MongoCollection<Document> collection = getCollection("students");
        //查询所有文档
        MongoCursor<Document> cursor = collection.find().iterator();
//        MongoCursor<Document> cursor = collection.find().limit(100);//只看前100行
//        MongoCursor<Document> cursor = collection.find().first();//只看第一行
        try {
            while (cursor.hasNext()) {
                System.out.println(cursor.next().toJson());
            }
        }finally {
            cursor.close();
        }

4.2、条件查询

主要依靠Filters类进行拦截过滤。

//多条件查询 60<=score<80 并且 address="山西"(如果address是数组,则"山西"包含在内即可)
        FindIterable<Document> documents = collection.find(
                new Document("score", new Document("$gte", 60)
                        .append("$lt", 80))
                        .append("address", "山西")
        );
        //等价于上面的
        collection.find(Filters.and(
                Filters.gte("score",60),
                Filters.lt("score",80),
                Filters.eq("address","山西")));

4.3、投影

投影就是选择展示的字段,因为默认是全部展示的。即使设置了想要展示的字段,"_id"字段也会被展示,需要用专门指定"_id"为0或者使用 Projections.excludeId()。

 //投影
        collection.find(
                Filters.eq("name","李大喜")
                ).projection(new Document("name",1)
                .append("sex",1)
                .append("age",1)
                .append("_id",0)
        );
        //等价于上面的投影 Projections.excludeId() 不展示 _id
        collection.find(
                Filters.eq("name","李大喜"))
        .projection(Projections.fields(Projections.include("name","sex","age"),Projections.excludeId()));

4.4、排序

//排序 先按照年龄排序 年龄一样的安照工资排序
        //asc 升序
        //desc 降序
        collection.find(Filters.lt("age",50))
        .sort(Sorts.ascending("age","sal"));


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
JSON Java 测试技术
Elasticsearch常用Java API编程 1
Elasticsearch常用Java API编程
108 0
|
7月前
|
Java 分布式数据库 API
HBase java API
HBase java API
52 0
|
JSON Java 测试技术
Elasticsearch常用Java API编程 2
Elasticsearch常用Java API编程
87 0
|
Java API 数据安全/隐私保护
Elasticsearch Java API Client 开发
本场景主要介绍如何使用 Elasticsearch Java API Client 进行开发,实现常用的 CRUD 操作。
|
SQL 存储 IDE
9:JDBC-Java API 实战
9:JDBC-Java API 实战
82 0
9:JDBC-Java API 实战
|
Java API 索引
java对api elasticsearch(ES)操作
java对api elasticsearch(ES)操作
149 0
|
自然语言处理 算法 数据建模
ElasticSearch 查询与 Java API 实践(上)
ElasticSearch 查询与 Java API 实践
350 0
ElasticSearch 查询与 Java API 实践(上)
|
Java 分布式数据库 API
|
SQL 存储 JSON
ElasticSearch 查询与 Java API 实践(下)
ElasticSearch 查询与 Java API 实践
952 0
ElasticSearch 查询与 Java API 实践(下)
|
存储 Java 数据建模
ElasticSearch 查询与 Java API 实践(中)
ElasticSearch 查询与 Java API 实践
324 0
ElasticSearch 查询与 Java API 实践(中)