mongoDB的使用,以及javaAPI操作数据库

0、mongoDB开启运程调用

  1. 在配置文件中加入
  2. 如果想远程连接mongoDB数据库
    必须在/usr/local/mongodb/etc/mongodb.conf ,加上最后一行!!!
    bind_ip=0.0.0.0 #允许连接的ip

[root@node0 etc]#

vim mongodb.conf
dbpath=/usr/local/mongodb/data/db
logpath=/usr/local/mongodb/log/mongodb.log
port=27017
fork=true
auth=true
bind_ip=0.0.0.0 #允许连接的ip

1、建立maven 项目

2、添加依赖:

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

3、建一个类:这个类是操作数据库的工具类,并且使用了池和用户验证

package com.hyc;


import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;


import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;


/**
 * 类说明:基于池的连接mongodb,加上用户认证!
 *
 * @author hyc
 * @version 1.0
 * @date 2021/11/14 22:27
 */
public class MongoDBAuthPoolUtil {
    private static MongoClient client = null;


    static {
        if (client == null) {
            MongoClientOptions.Builder builder = new MongoClientOptions.Builder();


            builder.connectionsPerHost(10);//每个地址的最大连 builder.connectTimeout(5000);//连接超时时间
            builder.socketTimeout(5000);//设置读写操作超时时间
            // 设置用户名,用户密码,数据库
            MongoCredential credential = MongoCredential.createCredential("itsxt", "develop", "itsxtpwd".toCharArray());
            // 数据库地址
            ServerAddress address = new ServerAddress("192.168.2.130", 27017);
            client = new MongoClient(address, credential, builder.build());
        }
    }


    //获取 MongoDB 数据库
    public static MongoDatabase getDatabase(String dbName) {
        return client.getDatabase(dbName);
    }


    //获取 MongoDB 中的集合
    public static MongoCollection getCollection(String dbName, String collName) {
        MongoDatabase database = getDatabase(dbName);
        return database.getCollection(collName);
    }


    //创建集合
    public static void createCollection(String dbName, String collName) {
        MongoDatabase database = getDatabase(dbName);
        database.createCollection(collName);
    }


    //删除集合
    public static void dropCollection(MongoCollection coll) {
        coll.drop();
    }








}

4、测试

package com.hyc;


import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;


import java.util.Arrays;


/**
 * 类说明:mongodb 用户验证的方式
 *
 * @author hyc
 * @version 1.0
 * @date 2021/11/14 20:58
 */
public class MongoDBDemo {
    public static void main(String[] args) {
       
        inesrtSingleDocument(); // 方法调用
    }
   
    /**
     * 添加单个文档
     */
    public static void inesrtSingleDocument() { //获取集合  dbName:数据库名称  collName :集合名称;相当于数据库中的表
        MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "dev");


// {}---->Document
//append(String key,Object value)---->{key:value}
        Document docu = new Document();
        docu.append("username", "王武").append("userage", 26).
                append("userdesc", "Very Good").append("userlike", Arrays.asList(new String[]{"Music", "Sport"}));
        collection.insertOne(docu);
    }
}

印象笔记连接

package com.hyc;


import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.model.Filters;
import org.bson.Document;
import org.bson.types.ObjectId;
import org.junit.Test;
import org.omg.CORBA.IRObject;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

/**
 * 类说明:对于文档的各种操作
 *
 * @author hyc
 * @version 1.0
 * @date 2021/11/15 14:37
 */
public class MongoDBAuthPoolUtilTest {
    private MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "devtest");

    /**
     * 文档的单个添加
     */
    @Test
    public void insertOne() {
        Document docu = new Document();
        docu.append("username", "王武").append("userage", 26).append("userdesc", "Very Good").append("userlike", Arrays.asList(new String[]{"Music", "Sport"}));
        collection.insertOne(docu);


    }

    /**
     * 文档的批量添加
     */
    @Test
    public void insertManyDocument() {
        // 获取到集合连接
//        MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "devtest");
        // 创建集合进行装入数据
        List<Document> list = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            // 文档数据
            Document docu = new Document();
            docu.append("username", "zhangsan" + i);
            docu.append("userage", 20 + i);
            docu.append("userdesc", "OK" + i);
            docu.append("userlike", Arrays.asList(new String[]{"Music", "Sport"}));
            list.add(docu);
        }
        collection.insertMany(list);
    }

    /**
     * 修改单个数据
     */
    @Test
    public void updateData() {
        //Filters 封装了条件的一个工具类{$set:{userage:28}},把lisi的年龄改为28
        collection.updateOne(Filters.eq("username", "lisi"), new Document("$set", new Document("userage", 28)));
    }

    /**
     * 更新单个文档多个键
     * Filters.eq()方法
     */
    @Test
    public void updateSingleDocumentManyKey() {
        collection.updateOne(Filters.eq("username", "zhangsan0"), new Document("$set", new Document("userage", 18).append("userdesc", "Very Good")));
    }

    /**
     * 更新多个文档单个键
     * Filters.ne()方法
     */
    @Test
    public void updateManyDocumentSingleKey() {
        collection.updateMany(Filters.ne("username", null), new Document("$set", new Document("userdesc", "Very Good")));
    }

    /**
     * 更新多个文档多个键
     */
    @Test
    public void updateManyDocumentManyKey() {
        collection.updateMany(Filters.ne("username", null), new Document("$set", new Document("userdesc", "OK").append("userage", 20)));
    }

    /**
     * 更新文档中的数组
     * {$push:{}} 添加一个值
     */
    @Test
    public void updateDocumentArray() {
        collection.updateOne(Filters.eq("username", "lisi"), new Document("$push", new Document("userlike", "Art")));
    }

    /**
     * 查询全部文档
     */

    @Test
    public void selectDocumentAll() {

        FindIterable<Document> iterable = collection.find();
        MongoCursor<Document> cursor = iterable.iterator();
        while (cursor.hasNext()) {
            Document document = cursor.next();
            System.out.println(document.get("username") + "\t" + document.get("userage") + "\t" + document.get("userdesc") + "\t" + document.get("userlike")+"\t"+document.get("userbirth"));
        }
    }

    /**
     * 根据_id 查询文档
     */
    @Test
    public void selectDocumentById() {
        FindIterable<Document> iterable =
                collection.find(Filters.eq("_id", new ObjectId("61920279062aaa3f308b54e3")));
        MongoCursor<Document> cursor = iterable.iterator();
        while (cursor.hasNext()) {
            Document docu = cursor.next();
            System.out.println(docu.get("username") + "\t" + docu.get("userage") + "\t" + docu.get("userdesc") + "\t" + docu.get("userlike"));
        }
    }

    /**
     * 根据年龄查询文档,条件是年龄大于 19
     */
    @Test
    public void selectDocumentConditionByGt() {
        FindIterable iterable = collection.find(Filters.gt("userage", 19));
        MongoCursor<Document> cursor = iterable.iterator();

        while (cursor.hasNext()) {
            Document docu = cursor.next();
            System.out.println(docu.get("username") + "\t" + docu.get("userage") + "\t" + docu.get("userdesc") + "\t" + docu.get("userlike"));
        }
    }

    /**
     * 插入系统当前日期
     */
    @Test
    public void insertDocumentSystemDate() {
        Document docu = new Document();
        docu.put("username", "找刘");
        docu.put("userage", 22);
        docu.put("userdesc", "Very Good");
        docu.put("userlike", Arrays.asList(new String[]{"Music", "Art"}));

        //系统时间
        docu.put("userbirth", new Date());
        collection.insertOne(docu);
    }

    /**
     * 插入指定日期
     */
    @Test
    public void insertDocumentCustDate() {
        Date date = DateUtil.stringToDate("yyyy-MM-dd HH:mm:ss", "2019-11-15 13:32:11");
        Document docu = new Document();
        docu.put("username", "zhaoliu");
        docu.put("userage", 24);
        docu.put("userdesc", "Very Good");
        docu.put("userlike", Arrays.asList(new String[]{"Music", "Art"}));
        docu.put("userbirth", date);
        collection.insertOne(docu);

    }


}

5、聚合查询

package com.hyc;

import com.mongodb.client.AggregateIterable;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import jdk.nashorn.tools.Shell;
import org.bson.Document;
import org.bson.types.ObjectId;
import org.junit.Test;

import java.nio.channels.Pipe;
import java.util.ArrayList;
import java.util.List;

/**
 * 类说明:
 *
 * @author hyc
 * @version 1.0
 * @date 2021/11/15 15:29
 */
public class AggregateFindTest {

    MongoCollection collection =
            MongoDBAuthPoolUtil.getCollection("develop", "dev");

    /**
     * 通过条件判断实现分页
     * $ne:!= 不等于的意思
     * $gt :>  大于
     */
    @Test
    public void selectDocumentByPageUseCondition() {
        int pageIndex = 1; // 第几页
        int pageSize = 2;// 每页条数
        String lastId = null; // 最后文档的id
        Document condition = new Document("size", new Document("$ne", null));
        //查询条数
        long countNum = collection.countDocuments(condition);
        // 打印条数
        System.out.println(countNum);
        FindIterable iterable = null;
        // 查询第一页
        if (pageIndex == 1) {
            iterable = collection.find(condition).limit(pageSize);
            // 不是第一页
        } else {
            if (lastId != null) {
                condition.append("_id", new Document("$gt", new ObjectId(lastId)));
                iterable = collection.find(condition).limit(pageSize);
            }
        }
        MongoCursor<Document> cursor = iterable.iterator();
        while (cursor.hasNext()) {
            Document docu = cursor.next();
            System.out.println(docu);
        }
    }

    /**
     * 通过 skip 与 limit 方法实现分页
     */
    @Test
    public void selectDocumentByPageUseSkipAndLimit() {
        int pageIndex = 1;
        int page = (pageIndex - 1) * 2;
        Document condition = new Document("size", new Document("$ne", null));
        // 总页数
        long countNum = collection.countDocuments(condition);
        System.out.println(countNum);
        FindIterable iterable = collection.find(condition).skip(page).limit(2);
        MongoCursor<Document> cursor = iterable.iterator();
        while (cursor.hasNext()) {
            Document docu = cursor.next();
            System.out.println(docu);
        }
    }

    /**
     * 需求:查询集合中所有size的总和
     * mongo shell : db.dev.aggregate([{$group:{_id :null,totalSize:{$sum:"$size"}}}])
     */
    @Test
    public void selectDocumentAggregateSum() {

        Document sum = new Document();
        sum.put("$sum", "$size");

        Document totelSize = new Document();
        totelSize.put("_id", null);
        totelSize.put("totalSize", sum);

        Document group = new Document();
        group.put("$group", totelSize);

        ArrayList<Object> list = new ArrayList<>();
        list.add(group);

        AggregateIterable iterable = collection.aggregate(list);
        MongoCursor<Document> cursor = iterable.iterator();
        while (cursor.hasNext()) {
            Document docu = cursor.next();
            System.out.println(docu.get("totalSize"));
        }


    }


    /**
     * 需求:查询集合中的文档数量,每一个{}相当于一个document
     * Mongo Shell:   db.dev.aggregate([{$group:{_id:null,count:{$sum:1}}}])
     */
    @Test
    public void selectDocumentAggregateCount() {

        Document sum = new Document();
        sum.put("$sum", 1);
        Document count = new Document();
        count.put("_id", null);
        count.put("count", sum);
        Document group = new Document();
        group.put("$group", count);
        List<Document> list = new ArrayList<>();
        list.add(group);
        AggregateIterable iterable = collection.aggregate(list);
        MongoCursor<Document> cursor = iterable.iterator();
        while (cursor.hasNext()) {
            Document docu = cursor.next();
            System.out.println(docu.get("count"));
        }
    }

}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MongoDB提供了Java驱动程序,以便使用Java语言访问数据库。以下是MongoDB Java操作API的一些示例代码: 1. 连接到数据库: ``` MongoClient mongoClient = new MongoClient("localhost", 27017); MongoDatabase database = mongoClient.getDatabase("mydatabase"); ``` 2. 插入数据: ``` MongoCollection<Document> collection = database.getCollection("mycollection"); Document document = new Document("name", "John Doe") .append("age", 30) .append("address", new Document("street", "123 Main St") .append("city", "Anytown") .append("state", "CA") .append("zip", 12345)); collection.insertOne(document); ``` 3. 查询数据: ``` MongoCollection<Document> collection = database.getCollection("mycollection"); Document query = new Document("name", "John Doe"); FindIterable<Document> results = collection.find(query); for (Document result : results) { System.out.println(result.toJson()); } ``` 4. 更新数据: ``` MongoCollection<Document> collection = database.getCollection("mycollection"); Document query = new Document("name", "John Doe"); Document update = new Document("$set", new Document("age", 31)); UpdateResult result = collection.updateOne(query, update); System.out.println("Modified count: " + result.getModifiedCount()); ``` 5. 删除数据: ``` MongoCollection<Document> collection = database.getCollection("mycollection"); Document query = new Document("name", "John Doe"); DeleteResult result = collection.deleteOne(query); System.out.println("Deleted count: " + result.getDeletedCount()); ``` 这些示例代码可以帮助你开始使用MongoDB Java操作API。但是,还有很多其他功能可以探索,具体取决于你的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值