java操作MongoDB

1、准备工作

1、导入依赖:

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

2、编写代码

        //创建连接对象
        MongoClient mongoClient = new MongoClient("127.0.0.1",27017);
        //获取数据库
        DB db = mongoClient.getDB("test");
        //获取集合
        DBCollection users = db.getCollection("users");

2、基本操作

1、新增
    /**
     * 新增
     * 方式一
     * 创建BasicDBObject对象,一次插入一条数据
     */
    @Test
    public void test_BasicDBObject(){
        BasicDBObject object = new BasicDBObject();
        object.put("username","wang");
        object.append("age",15).append("birthday",new Date());
        users.insert(object);
    }

    /**
     * 新增
     * 方式二
     * 创建BasicDBObjectBuilder对象
     */
    @Test
    public void test_BasicDBObjectBuilder(){
        BasicDBObjectBuilder builder = BasicDBObjectBuilder.start().
                add("username","bing").
                add("age",20).
                add("birthday",new Date());
        users.insert(builder.get());
    }

    /**
     * 新增
     * 方式三
     * 构造BasicDBObject对象,构造方法参数传一个map
     */
    @Test
    public void test_Map(){
        Map<String,Object> data = new HashMap<>();
        data.put("username","wangbing");
        data.put("age",11);
        data.put("birthday",new Date());
        users.insert(new BasicDBObject(data));
    }

    /**
     * 新增
     * 方式四
     * 直接构造json
     */
    @Test
    public void test_json(){
        String json = "{'username':'zhangsan','age':12}";
        DBObject object = (DBObject) JSON.parse(json);
        users.insert(object);
    }

2、删除
    /**
     * 删除
     * 通过包装BasicDBObject("username","zhangsan")对象删除,
     * 直接创建一个空对象,即为删除全部
     */
    @Test
    public void test_remove(){
        WriteResult writeResult = users.remove(new BasicDBObject("username","zhangsan"));
        //删除的条数
        int n = writeResult.getN();
        System.out.println(n);
    }
3、更新
    /**
     * 修改
     */
    @Test
    public void test_update(){
        WriteResult update = users.update(new BasicDBObject("username", "bing"),
                new BasicDBObject("username", "lisi").
                //append("age", 13).
                append("birthday", new Date()));
        int n = update.getN();
        System.out.println(n);
    }

    /**
     * 使用修改器更新
     */
    @Test
    public void test_update2(){
        users.update(new BasicDBObject("username","lisi"),
                new BasicDBObject("$set",new BasicDBObject("username","lisi2")));
    }
4、查询

1、匹配查询

MongoDB使用BasicDBObject类型封装查询条件,构造方法的参数为key 和value 。

BasicDBObject dbObject = new BasicDBObject("username","zhangsan");
DBCursor dbObjects = users.find(dbObject);
while (dbCursor.hasNext()){
    DBObject dbObject = dbCursor.next();
    System.out.println(dbObject);
}

2、模糊查询

构建模糊查询条件是通过正则表达式的方式来实现的

(1)完全匹配Pattern pattern = Pattern.compile(“^name$”);

(2)右匹配Pattern pattern = Pattern.compile(“^.*name$”);

(3)左匹配Pattern pattern = Pattern.compile(“^name.*$”);

(4)模糊匹配Pattern pattern = Pattern.compile(“^.name.$”);

//查询集合中address含有“洞”的文档
Pattern pattern = Pattern.compile("^.*洞.*$");
BasicDBObject basicDBObject1 = new BasicDBObject("address",pattern);
DBCursor cursor = users.find(basicDBObject1);

3、大于小于

//age大于20的文档
BasicDBObject bson=new BasicDBObject("age", new BasicDBObject("$lt",20));

4、并且

查询年龄大于等于20并且小于30的文档记录

//查询年龄大于等于20的           
BasicDBObject bson1=new BasicDBObject("age", new BasicDBObject("$gte",20));
//查询年龄小于30的
BasicDBObject bson2=new BasicDBObject("age", new BasicDBObject("$lt",30));
//构建查询条件and
BasicDBObject bson=new  BasicDBObject("$and", Arrays.asList(bson1,bson2)  );

5、或者

BasicDBObject bson1=new BasicDBObject("age", new BasicDBObject("$lte",20));        
BasicDBObject bson2=new BasicDBObject("sex", "女");
//构建查询条件or
BasicDBObject bson=new BasicDBObject("$or", Arrays.asList( bson1, bson2 )  );

3、MongoDB连接池

MongoClient内部实现了一个连接池,默认初始化10个连接,MongoClient对象是线程安全的,因此可以只创建一个,在多线程环境下安全使用。

另外要注意,close方法将关闭当前所有活跃的连接,所以应该在确定不再使用 MongoDB的时候才应该关闭。

参数设置:

//对mongoClient初始化
private static void init(){
        //连接池选项
        Builder builder = new MongoClientOptions.Builder();//选项构建者  
        builder.connectTimeout(5000);//设置连接超时时间
        builder.socketTimeout(5000);//读取数据的超时时间
        builder.connectionsPerHost(30);//每个地址最大请求数      
        builder.writeConcern(WriteConcern.NORMAL);//写入策略,仅抛出网络异常
        MongoClientOptions options = builder.build();
        mongoClient=new MongoClient("127.0.0.1",options);   
}

写入策略:

  • WriteConcern.NONE:没有异常抛出
  • WriteConcern.NORMAL:仅抛出网络错误异常,没有服务器错误异常
  • WriteConcern.SAFE:抛出网络错误异常、服务器错误异常;并等待服务器完成写操作。
  • WriteConcern.MAJORITY: 抛出网络错误异常、服务器错误异常;并等待一个主服务器完成写操作。
  • WriteConcern.FSYNC_SAFE: 抛出网络错误异常、服务器错误异常;写操作等待服务器将数据刷新到磁盘。
  • WriteConcern.JOURNAL_SAFE:抛出网络错误异常、服务器错误异常;写操作等待服务器提交到磁盘的日志文件。
  • WriteConcern.REPLICAS_SAFE:抛出网络错误异常、服务器错误异常;等待至少2台服务器完成写操作。
### Java 操作 MongoDB 的基础 为了实现对MongoDB操作,在Java程序中通常会引入`mongodb-driver-sync`库。此库提供了同步驱动器,允许开发者执行基本的CRUD操作以及更复杂的查询。 #### 创建连接并获取数据库实例 建立与MongoDB服务器的连接是任何交互的第一步。这可以通过`MongoClients.create()`方法完成,该方法返回一个表示客户端连接的对象。对于本地运行的服务,默认情况下监听27017端口[^2]: ```java import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; // 创建一个新的 MongoClient 实例用于连接默认地址 (localhost) 和端口 (27017) MongoClient mongoClient = MongoClients.create(); ``` 接着可以利用获得的客户端对象调用`getDatabase(String dbName)`函数来选定特定名称下的数据库作为工作区: ```java com.mongodb.client.MongoDatabase database = mongoClient.getDatabase("test"); ``` #### 执行 CRUD 操作 ##### 插入文档 向集合内添加新记录涉及构建BSON格式的数据结构并通过适当的方法提交给目标集合。下面的例子展示了怎样往名为“users”的集合里加入一条新的用户信息[^3]: ```java import org.bson.Document; public void insertUser() { Document userDoc = new Document("name", "Alice").append("age", 30); database.getCollection("users").insertOne(userDoc); } ``` ##### 查询文档 检索已存数据同样依赖于Document类定义条件表达式,并传递至find()或findOneAndDelete()等查找接口。这里给出一段简单的代码片段用来展示如何读取所有用户的姓名列表: ```java for (Document doc : database.getCollection("users").find()) { System.out.println(doc.getString("name")); } ``` ##### 更新现有条目 当需要修改某些字段的内容时,则应该准备更新指令连同匹配模式一起交给updateMany()或者replaceOne()这样的命令处理。下述例子说明了更改年龄大于等于30岁的所有人职业为工程师的过程[^5]: ```java database.getCollection("users") .updateMany( Filters.gte("age", 30), Updates.set("job", "engineer") ); ``` ##### 删除指定项 最后如果想要移除符合条件的一条或多条记录,可借助deleteOne()或是deleteMany()来进行相应设置。比如删除名字叫Bob的所有条目的方式如下所示: ```java database.getCollection("users").deleteMany(new Document("name", "Bob")); ``` 以上就是关于使用Java语言控制MongoDB的一些基础知识和技术要点概述[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值