• MongoDB学习(四):通过Java使用MongoDB


    环境配置

    在Java项目中使用MongoDB,需要在项目中引入mongo.jar这个包。下载地址:下载

    请尽量下载较新的版本,本文用的是2.10.1。

    连接MongoDB

    1 public synchronized static DB getDBConnection() throws UnknownHostException{
    2         if(db == null){
    3             MongoClient client = new MongoClient(DB_SERVER_IP, DBSERVER_PORT);
    4             db = client.getDB(DB_NAME);
    5             System.out.println("GET DBCONNECTION SUCCESSFUL");
    6         }
    7         return db;
    8     }

    其中IP和PORT分别是数据库服务端的IP和端口号。

    创建集合

    public static DBCollection getCollection(String colName){
            col = db.getCollection(colName);
        if(col == null){
            col = db.createCollection(colName, null);
        }
          return col;
        }

    插入文档

    插入数据有4中方式可选:1.利用DBObjcet,2.利用DBObjectBuilder, 3.先创建Map对象,再用Map对象构造DBObject,4.直接通过json对象创建。

    这里我们主要介绍第一种方式——利用DBObject插入。DBObject是一个接口,继承自BSONObject,是可被存入数据库的一个键值的Map。这里我们使用它的基本实现:BasicDBObject。

    public static void insert(){
            DBCollection col = getCollection("myCollection1");
            if(col != null){
            DBObject o = new BasicDBObject();
            o.put("name", "Z");
            o.put("gender", "f");
            o.put("age", 1);
            col.insert(o);
            }
        }

    另外,你也可以使用BasicDBObject提供的append()函数,来为对象插入键值对。

    当你需要批量插入数据时,可以使用DBCollection.insert(List<DBObject> list);

    查询文档

    可以通过DBCollection.find()来查询集合中的文档。该函数返回一个游标DBCursor。通过对其迭代输出,就可以得到文档组。或者是通过DBCursor.toArray()直接转成DBObject的列表List<DBObject>。代码如下:

    public static void search(){
            DBCollection col = getCollection("myCollection1");
            if(col != null){
                DBCursor cursor = col.find();
                while(cursor.hasNext()){
                    DBObject o = cursor.next();
                    System.out.println(o);
                }
            }
        }
    public static void search(){
            DBCollection col = getCollection("myCollection1");
            if(col != null){
                List<DBObject> list = col.find().toArray();
            }
        }

    当然,也可以设置查询条件,并对输出结果的字段进行限制:

    public static void search2(){
            DBCollection col = getCollection("myCollection1");
            if(col != null){
                //查询条件
                DBObject query = new BasicDBObject();
                query.put("gender", "m");
                
                //输出结果是否有要输出某个字段。0表示不输出,1表示只输出该字段
                DBObject field = new BasicDBObject();
                field.put("name", 1);
                
                DBCursor cursor = col.find(query,field);
                while(cursor.hasNext()){
                    System.out.println(cursor.next());
                }
            }
        }

    上述代码就表示查询性别为m的全部文档,并输出其姓名。

    较复杂的条件查询:

        public static void search2(){
            DBCollection col = getCollection("myCollection1");
            if(col != null){
                //查询条件
                DBObject query = new BasicDBObject();
                DBObject o = new BasicDBObject("$lt",24).append("$gt", 21);
                query.put("age", o);
                            
                DBCursor cursor = col.find(query);
                while(cursor.hasNext()){
                    System.out.println(cursor.next());
                }
            }
        }

    这里我们筛选的是年龄小于24且大于21的全部文档。

    更新文档

        public static void update1(){
            DBCollection col = getCollection("myCollection1");
            if(col != null){
                //查询条件
                DBObject query = new BasicDBObject();
                query.put("name", "A");
                //用来替换的文档
                DBObject newObject = new BasicDBObject();
                newObject.put("name", "A1");
                col.update(query, newObject);
            }
        }

    这里我们将name这个字段等于A的文档替换成了name字段为A1的值,注意的是,新的文档将不包含旧文档的其他字段,是真正意义上的两个文档的替换,而非替换相同字段!另外一点需要注意的是,该方法只替换第一条符合查询条件的文档。因为multi的默认值为false,可以通过设置这个值为true来修改多条。

    findAndModity(DBObject query,  DBObject  fields, DBObject sort,  boolean remove, DBObject update,boolean returnNew,boolean upsert)也提供了类似的功能

    query - query to match

    fields - fields to be returned

    sort - sort to apply before picking first document

    remove - if true, document found will be removed

    update - update to apply

    returnNew - if true, the updated document is returned, otherwise the old document is returned (or it would be lost forever)upsert - do upsert (insert if document not present)

    删除文档

    删除指定的一个文档:

    public static void remove1(){
            DBCollection col = getCollection("myCollection1");
            if(col != null){
                DBObject o = col.findOne();
                col.remove(o);
            }
        }

    删除符合某条件的文档:

    public static void remove2(){
            DBCollection col = getCollection("myCollection1");
            if(col != null){
                //条件
                DBObject query = new BasicDBObject();
                query.put("name", "A1");
                col.remove(query);
            }
        }

    会删除符合条件的全部文档。

    如需要删除集合下的全部文档时,可结合DBCursor实现。

    参考:

    API文档:http://api.mongodb.org/java/2.10.1/

    其他资料:菜鸟教程

          http://blog.csdn.net/hx_uestc/article/details/7620938

  • 相关阅读:
    Hibernate学习笔记_关系映射
    Hibernate学习笔记_核心幵发接口及三种对象状态
    Hibernate学习笔记_联合主键
    Hibernate学习笔记_ID生成策略
    API的控制器
    MVC跨域API
    WindowsForms 调用API
    触发器
    视图
    分页的存储过程的用法
  • 原文地址:https://www.cnblogs.com/insaneXs/p/5169473.html
Copyright © 2020-2023  润新知