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台服务器完成写操作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值