Java调用MongoDB CRUD

package com.mongo.text;

import java.util.ArrayList;
import java.util.List;

import org.bson.Document;

import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;

public class MongoDBJDBC {

    private static final String host = "127.0.0.1";
    private static final int port = 27017;
    private static final String userName = "账号";
    private static final String password = "密码";
    private static final String dataBaseName = "数据库名称";
    private static final String tableName = "集合名称";
    
      public static void main(String[] args){    
            MongoClient mongoClient=null;
            try {    
                // 连接到MongoDB服务 如果是远程连接可以替换“localhost”为服务器所在IP地址    
                // ServerAddress()两个参数分别为 服务器地址 和 端口    
                ServerAddress serverAddress = new ServerAddress(host,port);    
                List<ServerAddress> addrs = new ArrayList<ServerAddress>();    
                addrs.add(serverAddress);    
                    
                //MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码    
                MongoCredential credential = MongoCredential.createScramSha1Credential(userName, dataBaseName, password.toCharArray());    
                List<MongoCredential> credentials = new ArrayList<MongoCredential>();    
                credentials.add(credential);    
                    
                // 通过连接认证获取MongoDB连接    
                // 第一种方式:MongoClientURI 参数解析:"mongodb://用户名:密码@地址:端口/?authSource=数据库名称"
//                MongoClientURI uri = new MongoClientURI("mongodb://luhailong:luhailong@10.4.66.195:27017/?authSource=demoDB");
//                mongoClient = new MongoClient(uri);
                // 第二种方式:MongoClient 参数解析:第一个参数里是地址跟端口的集合,第二个参数是安全验证集合
                mongoClient = new MongoClient(addrs,credentials);
                
                // 连接到数据库    
                MongoDatabase mongoDatabase = mongoClient.getDatabase(dataBaseName);    
                System.out.println("Connect to database successfully");    
                                
                // 获取集合 参数为“集合名称”    
                MongoCollection<Document> mongoCollection = mongoDatabase.getCollection(tableName);    
                System.out.println("Collection mycol selected successfully");    
                
                // 添加
                //addMongoDBList(mongoCollection);
                // 删除
                //dropMongoDB(mongoCollection);
                // 查询
                queryMongoDBList(mongoCollection);
                
            } catch (Exception e) {    
                System.out.println("MongoDBJDBC.java:出错了出错了出错了");  
                System.err.println( e.getClass().getName() + ": " + e.getMessage() );    
            }finally{    
                mongoClient.close(); //关闭MongoDB的连接   
            }              
        }
      
      /**
       * 查询
       * mongoCollection 根据集合名称获取的集合
       * */
      public static MongoCursor<Document> queryMongoDBList(MongoCollection<Document> mongoCollection){
          // 没有查询条件的方式    
          FindIterable<Document> findIterable = mongoCollection.find();  
          MongoCursor<Document> mongoCursor = findIterable.iterator();
          System.out.println("以下结果为没有查询条件(查询全部)");  
          while(mongoCursor.hasNext()){    
              System.out.println(mongoCursor.next());    
          }   
          
          // 如果只有一个条件可以用这样的形式  
          FindIterable<Document> findIterable1 = mongoCollection.find(Filters.eq("age", "18"));
          MongoCursor<Document> mongoCursor1 = findIterable1.iterator();
          System.out.println("以下结果为一个查询条件");  
          while(mongoCursor1.hasNext()){  
              Document d=mongoCursor1.next();  
              System.out.println("age的值为"+d.get("age"));  
              //System.out.println(mongoCursor1.next());  
          }    
          
          // 多个查询条件
          BasicDBObject cond=null;
          BasicDBList condList =null;
          cond = new BasicDBObject();  
          condList=new BasicDBList();//BasicDBList和"$in"作为BasicDBObject参数使用,有点类似or  
          condList.add((new BasicDBObject("age", new BasicDBObject("$gt", "18"))));  
          condList.add((new BasicDBObject("age", new BasicDBObject("$lt", "20"))));  
          cond.put("$or", condList);//多个条件or的实现方法,此处测试MongoDB3.4.2驱动也为3.4.2其中$gt与$gte和$lt与$lte效果一样,可能是bug     
          cond.put("name","李四");//put多个不同规则相当于and操作  
          FindIterable<Document> findIterable2 = mongoCollection.find(cond);  
          MongoCursor<Document> mongoCursor2 = findIterable2.iterator();    
          System.out.println("以下结果测试and条件查询");  
          while(mongoCursor2.hasNext()){    
              System.out.println(mongoCursor2.next());    
          }    
          
          return mongoCursor;
      }
      
      /**
       * 添加
       * mongoCollection 根据集合名称获取的集合
       * */
      public static void addMongoDBList(MongoCollection<Document> mongoCollection){
          /**  
           * 1. 创建文档 org.bson.Document 参数为key-value的格式  
           * 2. 创建文档集合List<Document>  
           * 3. 将文档集合插入数据库集合中 mongoCollection.insertMany(List<Document>) 插入单个文档可以用 mongoCollection.insertOne(Document)  
           * */    
          Document document = new Document("name", "张三").    
                  append("age", "18").    
                  append("sex", "man");   
          Document document1 = new Document("name", "李四").    
                  append("age", "20").    
                  append("sex", "girl");
          List<Document> documents = new ArrayList<Document>();    
          documents.add(document);  
          documents.add(document1);  
          //增加文档方法  
          //将含有多个document的List插入到数据库中,可以含有一个或多个,如果只插入一个document也可以用insertOne(document)代替
          mongoCollection.insertMany(documents);              
      }
      
      /**
       * 删除
       * mongoCollection 根据集合名称获取的集合
       * */
      public static void dropMongoDB(MongoCollection<Document> mongoCollection){
        // 删除符合条件的第一个文档    
        mongoCollection.deleteOne(Filters.eq("name", "张三"));    
        // 删除所有符合条件的文档    
       // mongoCollection.deleteMany (Filters.eq("name", "张三"));    
      }
}

 

转载于:https://my.oschina.net/u/3271403/blog/1162774

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值