设为首页 收藏本站
查看: 1365|回复: 0

[经验分享] mongDB基本命令和Java操作MongoDB

[复制链接]

尚未签到

发表于 2015-7-8 11:52:13 | 显示全部楼层 |阅读模式
  上一篇博文《mongoDB安装》我们安装了mongoDB,现在来复习一下它的一些基本命令:
mongoDB的bin目录加入到path之后,命令行中输入mongo:
  然后我们进入正题

1、查看有哪些数据库:



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

2、切换数据库



use chat

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

3、查看数据集合:



show collections

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

4、使用帮助命令:



*.help()

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



db.help()

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



db.chat.help()

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

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!",同时保存一个时间戳。
  
DSC0005.jpg
然后我们使用find命令查一下,可以看见我们的数据保存进去了:



db.msg.find()

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



db.msg.insert({_id:1,from:"lisi",to:"zhangsan",msg:"hello,zhangsan!",time:"1373615052442"})
//尝试插入一条李四对张三说的话
  然后可以发现报错了。告诉我们chat库的msg集合的_id的索引重复了。
DSC0007.jpg
  我们在试试使用save 命令:



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

  没有错误信息,然后使用find命令查询msg集合中的数据:
DSC0008.jpg
  我们可以看出,之前保存的信息被修改了,也就是insert命令是插入操作,id重复时会报错。save命令是saveOrUpdate的意思,id重复时会更新。

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

6.1最简单的查询



db.users.find()

  这是系统测试时的部分数据,因为隐私的问题,屏蔽了一些信息,仅供演示。
DSC0009.jpg
  上面的命令会自动显示数据集合中前20条数据。使用it命令,会将游标指向下20条数据。

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



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

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

6.3多个参数的查询:

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



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

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

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



db.users.find({$and:[{userName:"欧阳XX"},{orgName:"异议裁定一处"}]})
  下图是结果:
DSC00012.jpg

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



db.users.find({userId:{$gt:"00003198"}})
  如下结果:
编号大于00003198的所有用户被查出来了:
DSC00013.jpg
  此外类似的操作符还有:$gte≥、 $lt<、$lte$ne!=
  如:



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

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


7、count命令
  对一个查询进行计数:



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

  显示这个查询的结果是7条。
DSC00014.jpg
  同时也可以使用:



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

  两种方式结果相同:
DSC00015.jpg

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})

  下图是两种操作的结果:
DSC00016.jpg
  主要的命令就介绍这么多,其他的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 map = (Map)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运算比较强大,适合进行大数据量的运算,以后有时间看看。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-84470-1-1.html 上篇帖子: MongoDB配置ReplSet 下篇帖子: 使用CSharp Driver操作Mongodb介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表