什么是MongoDB ?
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
为什么要用MongoDB?
- 无数据结构限制
- 没有表结构的概念,每条记录可以有完全不同的结构
- sql数据库需要先定义表结构再使用,mongodb不需要
- 完全的索引支持
- 方便的冗余与扩展
- 复制集保证数据安全
- 分片扩展数据规模
MongoDB的适用场景
1、数据缓存
2、高伸缩性
3、弱事务类型的应用
4、大数据量高并发的应用
MongoDB的安装(windows)
下载地址:。
可以选择下载安装文件或者压缩包直接解压出来,这里我习惯直接下载压缩包解压出来使用。下载好的压缩包:
解压后的目录结构:
、
bin目录下两个重要的文件:mongod.exe、mongo.exe。前者是用于启动mongodb服务的,后者用于连接mongodb服务,为了方便在命令行中使用,需要配置环境变量,将bin目录配置到path目录下。
搭建简单的MongoDB服务器
在某个目录下新建以下几个文件夹,这里在F:\mongoDB下新建了三个文件夹分别用来存储配置文件,数据文件和日志文件
,conf目录下新建一个配置文件,编写配置信息。配置相应的端口(mongoDB默认的端口为27017,如果使用默认端口,则无需指定)、数据库目录、日志文件的地址。
启动服务,在命令行窗口下输入:mongod -f F:\mongoDB\conf\mongo.conf,即可根据设置的配置启动服务。启动服务后会在dbpath下生成默认的数据库文件
连接MongoDB
这里讲的是利用mongo.exe进行连接,打开新的命令行窗口,输入mongo命令即链接上了,这里由于没有指定具体连接哪个数据库,因此默认的是链接test数据库。
在此命令窗口下键入相关命令实现对数据库不同的操作。这里先罗列出几个简单的命令:
db:查看当前使用的数据库
show dbs:显示有哪些数据库(如果一个数据库没有数据不会显示)。
use 数据库名:使用哪个数据库,如果没有该数据库,系统在使用到的时候会默认创建这个数据库。
show collections:显示当前数据库下所有的集合(类同于关系数据库的表)。
db.shutdownServer():关闭服务。
db.dropDatabase():删除当前使用的数据库。
MongoDB的基本使用
1、插入数据与查询数据
在mongodb中,集合就是数据库的表
写入数据的命令为:db.集合名.insert();
查询数据的命令为:db.集合名.find();如果需要指定查询某些数据,则在find中传入json串代表你要查询的数据。
查询集合有多少条数据:db.集合名.find().count()
分页排序查询数据:db.集合名.find().skip(start).limit(pagesize).sort();
注:这里排序total指定的1代表正序排列,-1位逆序排列
2、修改和删除
update() 方法用于更新已存在的文档。语法格式如下:
db.collection.update(, , { upsert: , multi: , writeConcern: })
参数说明:
- query : update的查询条件,类似sql update查询内where后面的。
- update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的。在更新的语句加上$set代表只更新指定的字段,其他字段不更新。
- upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
- multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
- writeConcern :可选,抛出异常的级别。
remove() 方法用于更新已存在的文档。语法格式如下:
db.collection.remove(, { justOne: , writeConcern: })
参数说明:
- query :(可选)删除的文档的条件。
- justOne : (可选)如果设为 true 或 1,则只删除一个文档。
- writeConcern :(可选)抛出异常的级别。
删除集合:db.collection.drop();
3、创建索引
查看当前集合下的索引:db.product.getIndexes()
创建索引:db.product.ensureIndex();
实例:
注:name后的1代表升序,-1代表倒叙。