zoukankan      html  css  js  c++  java
  • mongDB基本命令和Java操作MongoDB

    上一篇博文《mongoDB安装》我们安装了mongoDB,现在来复习一下它的一些基本命令:
    mongoDB的bin目录加入到path之后,命令行中输入mongo:

    然后我们进入正题

    1、查看有哪些数据库:

    show dbs

    我们可以看见有两个库,一个是之前做即时通讯系统测试的chat库,一个是local库。

    2、切换数据库

    use chat
    

    如上命令我们切换到即时通讯系统的库:

    3、查看数据集合:

    show collections
    

    使用上面的命令,可以查看我们即时通讯系统的chat库中的所有数据集合。我们可以看见一些诸如存放消息的msg集合、存放用户信息的users集合,以及存放索引信息的system.indexes集合。

    4、使用帮助命令:

    *.help()
    

    这里的*可以是数据库、数据集合等。
    如数据库:

    db.help()
    

    可以看见一些常见的操作如addUser添加用户、getCollectionNames获取数据集合名称等等。


    或者数据集合的:

    db.chat.help()
    

    我们可以看见经常用到的命令:
    保存save()、删除remove()、查询find()、计数count()、删除drop()、排序sort()、类似于MySQL的limit()等等方法,而且给出了一些例子和简单的语法说明。

    5、插入save()/insert()

    先看save,从上面的help中我们看见,save和insert都接受一个obj对象。我们用类似于Actionscript/Javascript的方式声明一个对象,然后保存:

    db.msg.save({_id:1,from:"zhangsam",to:"lisi",msg:"hello world!",time:"1373615052442"})
    //保存一条张三对李四说的消息,内容为"hello world!",同时保存一个时间戳。


    然后我们使用find命令查一下,可以看见我们的数据保存进去了:

     db.msg.find()
    

    然后我们试着使用insert插入一条_id仍然为1的数据,看看会出现什么:

    db.msg.insert({_id:1,from:"lisi",to:"zhangsan",msg:"hello,zhangsan!",time:"1373615052442"})
    //尝试插入一条李四对张三说的话

    然后可以发现报错了。告诉我们chat库的msg集合的_id的索引重复了。

    我们在试试使用save 命令:

    db.msg.save({_id:1,from:"lisi",to:"zhangsan",msg:"hello,zhangsan!",time:"1373615052442"})
    

    没有错误信息,然后使用find命令查询msg集合中的数据:

    我们可以看出,之前保存的信息被修改了,也就是insert命令是插入操作,id重复时会报错。save命令是saveOrUpdate的意思,id重复时会更新。

    6、find命令

    一般数据库的查询是最常用也最复杂的,MongoDB也不例外,我们来看看一些例子:

    6.1最简单的查询

    db.users.find()
    

    这是系统测试时的部分数据,因为隐私的问题,屏蔽了一些信息,仅供演示。

    上面的命令会自动显示数据集合中前20条数据。使用it命令,会将游标指向下20条数据。

    6.2 带简单参数的查询:

    我们来查询上面表中的系统管理员,他的"userId"是USER0000000000000000000000000001。
    使用如下命令:

    db.users.find({"userId" : "USER0000000000000000000000000001"});
    

    从下面的图中我们可以看见,用户编号为USER0000000000000000000000000001的“系统管理员”被我们查出来了。

    6.3多个参数的查询:

    6.3.1 or

    比如我们要查“国际注册处”或者“异议裁定一处”的所有用户,使用类似于SQL中的or:

    db.users.find({$or:[{orgName:"国际注册处"},{orgName:"异议裁定一处"}]})
    

    我们可以看见,测试数据中的四个操作者被查出来了。

    6.3.2 and

    用法类似于or,我们使用如下命令来查询异议裁定一处的名为欧阳XX的用户

    db.users.find({$and:[{userName:"欧阳XX"},{orgName:"异议裁定一处"}]})

    下图是结果:

    6.4操作符

    查找用户编码大于00003198的所有用户:
    使用$gt大于的意思

     db.users.find({userId:{$gt:"00003198"}})

    如下结果:
    编号大于00003198的所有用户被查出来了:

    此外类似的操作符还有:$gte≥、 $lt<、$lte$ne!=

     如:

    > db.msg.find({_id:{$ne:2}})
    

    以此类推,不再逐一赘述。

     7、count命令

    对一个查询进行计数:

    > db.users.find({userId:{$gt:"00003198"}}).count()
    

    显示这个查询的结果是7条。

     同时也可以使用:

    db.users.count({userId:{$gt:"00003198"}})
    

    两种方式结果相同:

     8、sort命令:

    语法:query.sort({字段A:-1/1})
    将一个查询使用字段A的降序、升序排列:

    db.users.find({userId:{$gt:"00003198"}}).sort({userId:1})
    db.users.find({userId:{$gt:"00003198"}}).sort({userId:-1})
    

    下图是两种操作的结果:

     主要的命令就介绍这么多,其他的update、remove、skip、limit命令大多类似于find或相对比较简单。下面我们说说在Java中使用这些命令。

     Java中使用MongoDB

    Java使用MongoDB非常方便,下面是简单的步骤。

    1、官网下载驱动,我们使用的是mongo-java-driver-2.9.3.jar

    2、获取数据库连接实例

    public static void initDB(){
            try {
                InputStream bin = Object.class.getResourceAsStream("/db.properties");
                p.load(bin);
                mongo = new Mongo(p.getProperty("MONGO_IP"),Integer.parseInt(p.getProperty("MONGO_PORT")));
                mongo.getMongoOptions().connectionsPerHost = Integer.parseInt(p.getProperty("MAX_SIZE"));
         } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{
          
    if(bin != null){
    bin.close();
    }
         }
    }

    3、获取DBCollection数据集合

    DBCollection msgCol =  mongo.getDB(p.getProperty("DB_NAME")).getCollection("msg");
    DBCollection userCol = mongo.getDB(p.getProperty("DB_NAME")).getCollection("users");

    4、演示一个save的方法

    public void saveMsg(Msg msg){
            if(msg == null){
                return;
            }
            DBObject obj = new BasicDBObject();
            obj.put("from", msg.from);
            obj.put("to", msg.to);
            obj.put("time", Long.parseLong(msg.time));
            obj.put("toName", msg.toName);
            obj.put("msg", msg.msg);
            obj.put("userId", msg.userId);
            obj.put("userName", msg.userName);
            obj.put("orgId", msg.orgId);
            obj.put("orgName", msg.orgName);
            obj.put("type", msg.type);
            msgCol.save(obj);
        }

    备注:如果要指定id,可以使用ObjectId对象

    5、演示一个使用or操作符的查询:

        @SuppressWarnings("unchecked")
        public String getChatLog(Msg msg) {
            Map<String, Object> map = (Map<String, Object>)JSON.parse(msg.data);
            BasicDBList list = new BasicDBList();
            //out
            DBObject out = new BasicDBObject("to", map.get("targetId"));
            out.put("from", msg.from);
            list.add(out);
            //in
            DBObject in = new BasicDBObject("from", map.get("targetId"));
            in.put("to", msg.from);
            list.add(in);
            DBObject query = new BasicDBObject("$or", list);
            DBCursor cursor = msgCol.find(query).skip(Integer.parseInt(map.get("skip").toString())).limit(Integer.parseInt(map.get("limit").toString()));
            DBObject each;
            StringBuffer sb = new StringBuffer("[");
            while(cursor.hasNext()){
                each = cursor.next();
           //DBobject是一个类似于map的东西,可以在这里get出来,然后处理业务逻辑 ...Code... }

    其他的方法类似于上面的操作。

    写在最后:
    以上只是一个入门吧,其实MongoDB的Map-Reduce和aggregate运算比较强大,适合进行大数据量的运算,以后有时间看看。

  • 相关阅读:
    四、面向对象分析和设计全流程概述
    三、三大核心特征-继承
    二、三大核心特征-多态
    [第三章]一、三大核心特征-封装
    四、抽象类
    三、接口
    二、对象
    [第二章]一、类
    六、面向对象的迷思
    五、面向对象的应用范围
  • 原文地址:https://www.cnblogs.com/radio/p/3151052.html
Copyright © 2011-2022 走看看