20.使用javaAPI操作MongoDB

Posted 大数据小小罗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20.使用javaAPI操作MongoDB相关的知识,希望对你有一定的参考价值。

获取集合实例的工具类:

package com.itcast.util;

import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.Mongo;

public class DBUtil 
    public static Mongo mg = null;
    public static DB db = null;
    public static DBCollection collection;

    /**
     * 根据 数据库名称dbName 和集合名称collName 获取集合实例
     * @param dbName    数据库名称
     * @param collName  集合名称
     * @return
     */
    public static DBCollection getDBCollection(String dbName, String collName)
        if(mg==null)
            try 
                mg = new Mongo(); //相当于 new Mongo("127.0.0.1:27017");
             catch (Exception e) 
                e.printStackTrace();
            
        

        if(db ==null)
            db = mg.getDB(dbName);
        

        return db.getCollection(collName);

    

增删改查示例

package com.itcast.helloworld;

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

import com.itcast.util.DBUtil;
import com.mongodb.BasicDBObject;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.WriteResult;

public class MongoTest 

    /**
     * MongoDB增删改查示例
     */
    public static void main(String[] args) 

        /**
         * 1.查询出集合users中所有的数据
         */
        query();

        /**
         * 2.删除haha集合中name="wangergou"的数据
         */
        DBObject obj = new BasicDBObject("name", "wangergou");
        delete(obj);

        /**
         * 3.插入一条数据
         */
        //  3.1首先创建要插入的对象 name:"liheizi",age:2,books:[shuihuzhuan,hongloumeng,xiyouji,sanguo]
        BasicDBObject objs = new BasicDBObject();
        objs.put("name","liheizi");
        objs.put("age",2);
        List<String> booklist = new ArrayList<String>();
        booklist.add("shuihuzhuan");
        booklist.add("hongloumeng");
        booklist.add("xiyouji");
        booklist.add("sanguo");
        objs.put("books", booklist);
        //  3.2执行插入
        insert(objs);
        //  3.3查看插入后的结果
        query2();

        /**
         * 4.批量插入数据
         */
        List<DBObject> objLists = new ArrayList<DBObject>();
        BasicDBObject jim = new BasicDBObject("name", "jim");
        BasicDBObject sally = new BasicDBObject("name", "tommy");
        objLists.add(jim);
        objLists.add(sally);

        insertBatch(objLists);
        query2();

        /**
         * 5.更新操作,为集合增加email属性
         */
        DBObject update = new BasicDBObject();
        //"$set"表示修改器 和shell中的使用时类似的
        update.put("$set", new BasicDBObject("email","sdfdf@qq.com"));
        update(new BasicDBObject(),update,false,true);
        query2();

        /**
         * 6.查询器的使用
         * 查询出users集合中的指定字段  (name和age)
         */
        DBObject queryObj = new BasicDBObject();
        queryObj.put("_id", false);
        queryObj.put("name", true);
        queryObj.put("age", true);
        DBCursor cur = find(null,queryObj);
        while(cur.hasNext())
            DBObject next = cur.next();
            System.out.println("name:"+next.get("name") + "-- age:"+next.get("age"));
        
    


    /**
     * 查询
     */
    public static void query()
        DBCollection coll = DBUtil.getDBCollection("foobar", "users");
        //查询集合中所有数据
        DBCursor cur = coll.find();

        while(cur.hasNext())
            DBObject obj = cur.next();
            System.out.println("name:"+obj.get("name")+"  age:"+obj.get("age")+"  country:"+obj.get("country"));
        

        System.out.println("查询结果总计:"+cur.count()+"条");
    
    public static void query2()
        DBCollection coll = DBUtil.getDBCollection("foobar", "haha");
        //查询集合中所有数据
        DBCursor cur = coll.find();

        while(cur.hasNext())
            DBObject obj = cur.next();
            System.out.println("name:"+obj.get("name")+" email:"+obj.get("email"));
        

        System.out.println("查询结果总计:"+cur.count()+"条");
    
    /**
     * 删除
     * @param obj
     */
    public static void delete(DBObject obj)

        DBCollection coll=DBUtil.getDBCollection("foobar", "haha");

        WriteResult res = coll.remove(obj);
        System.out.println("共影响到"+res.getN()+"条数据");
    

    /**
     * 插入数据
     */
    public static void insert(DBObject obj)

        DBCollection coll=DBUtil.getDBCollection("foobar", "haha");

        //执行插入操作
        System.out.println("共有"+coll.insert(obj).getN()+"条数据成功插入!");
    

    /**
     * 批量插入
     * @param objLists
     */
    public static void insertBatch(List<DBObject> objLists) 
        DBCollection coll = DBUtil.getDBCollection("foobar", "haha");
        coll.insert(objLists).getN();
    

    /**
     * 更新操作
     * @param queryObj  查询器
     * @param updateObj 修改后的值
     * @param upsert    true:存在则更新 不存在则插入
     * @param multi     是否进行全局多匹配操作?
     */
    private static void update(BasicDBObject queryObj, DBObject updateObj,
            boolean upsert, boolean multi) 

        DBCollection coll = DBUtil.getDBCollection("foobar", "haha");

        int count = coll.update(queryObj, updateObj, upsert, multi).getN();
        System.out.println(count+"条记录被更新");
    

    /**
     * 查询数据(不带分页)
     * @param ref 查询器 如果为null  代表是匹配所有
     * @param keys  要查询的字段集合
     * @param collName 被操作的集合对象  
     * @return
     */
    public static DBCursor find(DBObject ref, DBObject keys) 
        //1.得到集合
        DBCollection coll = DBUtil.getDBCollection("foobar", "users"); 

        return coll.find(ref, keys);
    


以上是关于20.使用javaAPI操作MongoDB的主要内容,如果未能解决你的问题,请参考以下文章

mongoDB3.4的sharding集群搭建及JavaAPI的简易使用

MongoDB Java API操作很全的整理

使用javaAPI操作hdfs

mongoDB在java中怎么根据内嵌文档条件查询

javaAPI操作-Zookeeper

使用javaAPI操作hdfs