MongoDB入门以及基本操作

  1. MongoDB:文档存储,一般用类似json的格式存储,存储的内容是文档型的。这样也就有机会对某些字段建立索引,实现关系数据库的某些功能。

  2. Redis: key-value存储

  3. MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。

  4. MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

  5. MongoDB主要特点:

    1. MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
    2. 你可以在MongoDB记录中设置任何属性的索引 (如:FirstName=“Sameer”,Address=“8 Gandhi Road”)来实现更快的排序。
    3. 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
    4. 如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
    5. Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
    6. MongoDB使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
    7. MongoDB中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
    8. Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
    9. Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
    10. GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
    11. MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
    12. MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
    13. MongoDB安装简单。
  6. 在windows中安装完成之后,需要配置环境变量,在path中添加下面的配置项,才能在命令行中管理MongoDB

    C:\Program Files\MongoDB\Server\4.0\bin
    
  7. 在windows的命令行中管理MongoDB

    net start MongoDB;   #启动MongoDB的服务
    net stop MongoDB;    #关闭MongoDB的服务
    mongo;               #连接MongoDB
    exit;                #退出MongoDB
    
  8. MongoDB与MySQL对应关系

    MongoDBMySQL
    DatabaseDatabase
    CollectionTable
    DocumentRow
  9. Json 与 Bson

    Bson是二进制的Json,Bson的效率非常高

  10. MongoDB的常用命令

cls;     #清屏
help;    #帮助
  1. Database的相关操作

    show dbs;                       #查看所有的数据库
    use demo;                       #转到指定的数据
    db.createCollection('test1');   #创建数据库
    db.getName();                   #查看当前使用的数据库
    db.getCollectionNames();        #查看所有创建的数据库
    db.dropDatabase();              #删除当前正在使用的数据库
    
  2. Collection的相关操作

    db.employee.insertOne({"first_name": "Taylor","last_name": "Edward","title": "software engineer","salary": 7500,"internship": false});  #向表中插入一条数据
    db.employee.insertMany([{"first_name": "Robin","last_name": "Jackman","title": "software engineer","salary": 3000,"internship": true},{"first_name": "Taylor","last_name": "Edward","title": "software engineer","salary": 7500,"internship": false}]);   #向表中插入多条数据
    db.employee.find();           #查看某个表中所有的数据
    db.employee.find().pretty();  #格式化查看表中所有的数据
    db.employee.drop();           #删除表
    db.employee.insertOne("a":1,"b":2,"_id":"1");    #插入的时候指定id,但是id不能重复
    db.employee.deleteOne({"_id":1});  #删除数据,会删除第一条匹配的数据
    db.employee.deleteMany({"a":1});   #删除数据,删除所有匹配的数据
    db.employee.deleteMany({"salary":{"$gt":2000}});  #删除salary大于2000的所有数据
    db.employee.find({title:"software engineer"});    #查询title为software engineer的所有记录
    db.employee.findOne({title:"software engineer"}); #查询title为software engineer的第一条记录
    db.employee.find({salary:{"$gt":6000}});   #查询salary大于6000的所有记录
    db.employee.findOne();                     #查询表中的第一条记录
    db.employee.find().toArray();              #将查询结果组装成一个数组
    db.employee.find({}, {first_name:1, last_name:1}); #只查询指定字段的数据
    db.employee.updateOne({"_id":ObjectId("5d28277d3456362e80ff6f78")}, {$set:{"salary":"4500"}}); #更新一条记录
    db.employee.updateMany({"title":"software engineer"}, {$set:{"salary":"7600"}});  #更新多条记录
    db.employee.update({"_id":ObjectId("5d28277d3456362e80ff6f78")}, {{"salary":"4500"}}); #覆盖的操作
    db.employee.replaceOne({"_id" : ObjectId("5d28277d3456362e80ff6f78")}, {"A":1, "B":2});#覆盖的操作
    
  3. updateMany和updateOne这更新指定的字段,update会用心传入的对象覆盖原有的对象。

  4. find();一次值展示20条,类似于分页的功能,输入it可以查询下一页的数据,it为Cursor,默认返回前20条。

  5. Document的嵌套,MongoDB也支持Document的嵌套,一个json对象里面还包含有数组或者json对象的对象,例如

    [
    	{
    		"first_name": "Robin",
    		"last_name": "Jackman",
    		"title": "software engineer",
    		"salary": 3000,
    		"internship": true,
    		"hobby":["book", "movie"],
    		"contact":{
    			"email":"Jackman@qq.com",
    			"phone":"111111"
    		}
    	},
    	{
    		"first_name": "Taylor",
    		"last_name": "Edward",
    		"title": "software engineer",
    		"salary": 7500,
    		"internship": false,
    		"hobby":["book", "gym"],
    		"contact":{
    			"email":"Edward@qq.com",
    			"phone":"444444"
    		}
    	}
    ]
    
  6. 复杂Document的查询

    db.employee.find({"contact.phone":"111111"});  #查询json对象里面套的json对象中的数据
    db.employee.find({hobby:"book"});  #hobby是一个数组,查找hobby中包含book的数据
    db.employee.find({hobby:["book","movie"]}); #查找hobby中包含book和movie的数据
    db.employee.find({hobby:{$in: ["book","movie"]}}); #查找hobby中包含book或movie的数据
    
  7. Document的亮点限制

    1. 单个Bson的Document最大不能超过16M;
    2. 单个Bson的Document的嵌套不能超过100层;
  8. Collection中有SCHEMA,但是可以不遵守,在实际的使用中我们需要有原则的自由,而不是随意的往Collection中插入数据。

  9. 数据类型

    类型说明
    String
    Boolean
    Number32 bit integer, 64bit integer, Decimal
    ObjectID
    DateTimestamp,ISODate
    Array
  10. 查看某条记录中具体字段的值及其对应的数据类型

    db.employee.findOne().first_name       #查看第一条数据的first_name的值
    db.employee.findOne().hobby            #查看数组类型的值
    db.employee.findOne().contact.phone    #查看文档下嵌套的json对象里面的某个字段的值
    typeof db.employee.findOne().salary    #查看某个字段具体的数据类型
    
  11. 时间数据类型

    var a = new Date();       //定义一个Date的数据
    var b = new Timestamp();  //定义一个时间戳的数据
    db.test.insertOne({date: a, timestamp: b});  //向test表中插入数据
    
  12. Number的数据类型

    var a = 1234;           //定义一个整形的数据
    var b = Number(1234);   //定义一个长整形的数据
    var c = 1.001;          //定义一个Decimal的数据
    db.test.insertOne({a: a, b: b, c: c};  //向表中插入Number的数据
    typeof db.test.findOne().a;  //查看表中某个字段的数据类型
    
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值