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

[经验分享] 分布式缓存学习之四:MongoDB

[复制链接]

尚未签到

发表于 2017-12-15 20:05:18 | 显示全部楼层 |阅读模式
  MongoDB是一个高性能,开源,无模式的文档型数据库,它在许多场景下可用于替代传统的关系型数据库或键/值存储方式,是当前NoSQL数据库中比较热门的一种。
  MongoDB使用C++开发。不支持SQL,但有自己功能强大的查询语法。MongoDB使用BSON作为数据存储和传输的格式。
  BSON是一种类似JSON的二进制序列化文档,支持嵌套对象和数组。MongoDB很像MySQL,collection对应MySQL的table,document对应MySQL的row。
  官方网站:http://www.mongodb.org/
  官方给自己的定义是Key-value存储(高性能和高扩展)和传统RDBMS(丰富的查询和功能)之间的一座桥梁。
  -----------------------------------------------------------------
  一、MongoDB存取原理:
  内部执行引擎为JS解释器(解释符合JS语法的语句):
  插入操作:把JSON对象数据存储成BSON结构的文档结构,
  查询操作:把BSON结构数据转换为JSON对象.
DSC0000.png

  二、MongoDB和关系型数据库区别
DSC0001.png

  三、MongoDB下载/安装/配置/启动/连接
  官方网站:http://www.mongodb.org/
  -----------------------------------------------------
  安装步骤:
  步骤1:
  压缩版本:mongodb-win32-x86_64-2008plus-ssl-3.0.2.zip(不建议使用,容易报错:计算机中丢失libeay32.dll)
  安装版本:mongodb-win32-x86_64-2008plus-ssl-3.0.2-signed.msi(安装版自带有libeay32.dll文件)
  步骤2:
  将MongoDB的bin目录配置PATH环境变量中,方便快速使用其命令。
  ------------------------------------------------------
  查阅帮助文档:
  一:启动MongoDB服务(端口默认为27017)。
  1:配置MongoDB数据存放位置
  mongod --dbpath H:\MongoDB\data
  2:重定向日志输出到日志文件(日志默认输出到控制台中)。
  mongod --dbpath H:\MongoDB\data --logpath H:\MongoDB\logs.txt
  二:连接MongoDB.
  1:最简单的连接(默认连接到本机的test数据库).
  mongo  127.0.0.1:27017/test
  简写: mongo
  2:连接到指定IP指定数据库中.
  mongo IP:端口/test
  三:基本操作命令.
  1:查询所有的数据库
  show dbs
  2:使用指定的数据库
  use databaseName
  3:查询当前数据库中所有的集合(表)
  show collections
  四:MongoDB客户端工具-MongoVUE.
  -------------------------------------------------------------
  显示创建collection:
  db.createCollection(‘collectionName’)   
  隐式创建collection(插入数据前创建):
  db.collectionName.insert(document);
  删除collection:
  db.collectionName.drop() ,
  删除database:
  db.dropDatabase();
  统计Collection中文档数量:
  db.collectionName.count();
  四、MongoDB的CRUD操作
  插入数据操作:
  语法: db.collectionName.insert(document);
  注意: mongodb存储的是文档, 文档是json格式的对象。
  比如操作user集合(表).
  -------------------------------------------------------------------------
  1: 增加单个文档。
  db.user.insert({name:"will",age:17});
  2: 增加单个文档,并指定_id。
  db.user.insert({_id:22,name:"will",age:17,gender:"boy",email:"will@itsource.cn"});
  3: 增加多个文档。
  db.user.insert([
  {name:"张三",age:17},
  {name:"李四",age:18},
  {name:"王五",age:19}
  ]);
  删除操作:
  语法: db.collectionName.remove(查询表达式, 是否删除多条选项);
  选项是指  {justOne:true/false},是否只删一行, 默认为false.
  比如操作user集合(表).
  -------------------------------------------------------------------------
  注意:
  1: 查询表达式依然是个json对象
  2: 查询表达式匹配的行,将被删掉.
  3: 如果不写查询表达式,collections中的所有文档将被删掉.
  ------------------------------------------------------------------------- 1:删除user集合中_id属性值为9527的文档 。
  db.user.remove({_id:9527});
  2:删除user集合中gender属性为boy的文档(默认删除多条数据)。
  db.user.remove({gender:"boy"});
  3:删除user集合中gender属性为girl的文档,只删除1行。
  db.user.remove({gender:"boy"},true);
  更新操作:
  语法: db.collectionName.update(查询条件,更新的数据,是否修改多条);
  比如操作user集合(表).
  -------------------------------------------------------------------------
  1:修改user集合中name为张三改成小王。
  db.user.update({name:"张三"},{name:"西门吹雪"});
  此时出现:其他的属性全部消失.
  db.user.update({name:"李四"},{$set:{name:"西门吹雪"}});
  2:修改user集合中所有name为孙2的年龄修改为22岁。
  db.user.update({name:"孙2"},{$set:{age:99}},{multi:true});
  查询操作:
  语法: db.collectionName.find(查询表达式,查询的列);
  比如操作user集合(表).
  -------------------------------------------------------------------------
  1:查询所有user集合中文档的数据。
  db.user.find();
  2:查询user集合中所有的gender属性 (_id属性默认总是查出来)。
  db.user.find({},{gender:true});
  3:查询user集合中所有的gender属性,且不查询_id属性。
  db.user.find({},{_id:false,gender:true});
  4:查询user集合中所有gender属性值为boy的文档中的name属性。
  db.user.find({gender:"boy"},{_id:false,name:true});
  5:查询user集合中所有gender属性值为boy并且年龄大于等于17的文档中的name属性。
  db.user.find({gender:"boy",age:{$gte:17}},{_id:false,name:true,age:true});
  五、Java中使用MongoDB
  相关jar:mongo-java-driver-3.0.0.jar
  

package com.mongodb;  

  
import java.util.HashMap;
  
import java.util.Map;
  

  
import org.bson.Document;
  
import org.bson.conversions.Bson;
  
import org.bson.types.ObjectId;
  

  
import com.mongodb.client.FindIterable;
  
import com.mongodb.client.MongoCollection;
  
import com.mongodb.client.MongoCursor;
  
import com.mongodb.client.MongoDatabase;
  


  
public>  

  
     public static void main(String[] args)
  
     {
  
         TestMongoDB test = new TestMongoDB();
  
         //插入数据
  
         test.insertData();
  
         //查询数据
  
         test.find();
  
         test.findone();
  
         //更新数据
  
         test.update();
  
         //删除数据
  
         test.delete();
  
     }
  
     
  
     public void find()
  
     {
  
         //创建连接客户端
  
                 MongoClient client = new MongoClient("localhost",27017);
  
                 //获取数据库对象
  
                 MongoDatabase db = client.getDatabase("test");
  
                 //获取操作的集合对象
  
                 MongoCollection<Document> collection = db.getCollection("wjy");
  
                 //具体操作
  
                 FindIterable<Document> it = collection.find();
  
                 //获取游标对象
  
                 MongoCursor<Document> cursor = it.iterator();
  
                 while (cursor.hasNext())
  
                 {
  
                     //取出每一个文档对象(行)
  
                     Document doc = cursor.next();
  
                     String name = doc.getString("name");
  
                     if ("乔峰".equals(name))
  
                     {
  
                         Integer age = doc.getInteger("age");
  
                         System.out.println(name+","+age);
  
                     }
  
                     else
  
                     {
  
                         Double age = doc.getDouble("age");
  
                         System.out.println(name+","+age);
  
                     }
  
                     
  
                 }
  
                 //释放资源
  
                 cursor.close();
  
                 client.close();
  
     }
  
     
  
     public void findone()
  
     {
  
         MongoClient client = new MongoClient("localhost",27017);
  
         //获取数据库对象
  
         MongoDatabase db = client.getDatabase("test");
  
         //获取操作的集合对象
  
         MongoCollection<Document> collection = db.getCollection("wjy");
  
         //具体操作
  
         Bson filter = new BasicDBObject("_id", new ObjectId("5850eacd7065f52b0eab7ff4"));
  
         FindIterable<Document> it = collection.find(filter);
  
         //获取游标对象
  
         MongoCursor<Document> cursor = it.iterator();
  
         while (cursor.hasNext())
  
         {
  
             //取出每一个文档对象(行)
  
             Document doc = cursor.next();
  
             String name = doc.getString("name");
  
             if ("乔峰".equals(name))
  
             {
  
                 Integer age = doc.getInteger("age");
  
                 System.out.println(name+","+age);
  
             }
  
             else
  
             {
  
                 Double age = doc.getDouble("age");
  
                 System.out.println(name+","+age);
  
             }
  
            
  
         }
  
         //释放资源
  
         cursor.close();
  
         client.close();
  
     }
  
     
  
     public void insertData()
  
     {
  
         MongoClient client = new MongoClient("localhost",27017);
  
         MongoDatabase db = client.getDatabase("test");
  
         MongoCollection<Document> collection = db.getCollection("wjy");
  
         //使用Map来封装json数据
  
         Map<String,Object> map = new HashMap<String,Object>();
  
         map.put("name", "乔峰");
  
         map.put("age", 35);
  
         map.put("gender", "true man");
  
         Map<String,Object> hobbyMap = new HashMap<String,Object>();
  
         hobbyMap.put("girl", "阿朱");
  
         hobbyMap.put("gongfu", "降龙十八掌");
  
         map.put("hobby", hobbyMap);
  
         Document doc = new Document(map);
  
         
  
         collection.insertOne(doc);
  
         
  
         client.close();
  
     }
  
     
  
     public void update()
  
     {
  
         MongoClient client = new MongoClient("localhost",27017);
  
         MongoDatabase db = client.getDatabase("test");
  
         MongoCollection<Document> collection = db.getCollection("wjy");
  
         
  
         Bson filter = new BasicDBObject("_id",new ObjectId("5850eacd7065f52b0eab7ff4"));
  
         
  
         Map<String,Object> map = new HashMap<String,Object>();
  
         map.put("name", "张无忌");
  
         map.put("age", 35);
  
         Bson update = new BasicDBObject(map);
  
         
  
         collection.updateOne(filter, new BasicDBObject("$set",update));
  
         
  
         client.close();
  
     }
  
     public void delete()
  
     {
  
         MongoClient client = new MongoClient("localhost",27017);
  
         MongoDatabase db = client.getDatabase("test");
  
         MongoCollection<Document> collection = db.getCollection("wjy");
  
         
  
         collection.deleteOne(new BasicDBObject("_id",new ObjectId("5850eacd7065f52b0eab7ff4")));
  
         
  
         client.close();
  
     }
  
}
  

  参考:http://www.icoolxue.com/album/affix/view/mongodb/1/12?orderBy=create_time

运维网声明 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-424487-1-1.html 上篇帖子: 从MongoDB的ObjectId中获取时间信息 下篇帖子: mongodb-mongotemplate进行地理坐标操作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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