一、NoSQL数据库简介
NoSQL数据库依然不可能离开传统的关系数据库(NotNoSQL数据库依然不可能离开传统的关系数据库(Not only SQL)
MongoDB数据库之中与关系型数据库有如下的概念对应:
关系型数据库 NoSQL数据库
数据库 数据库(类似于MySQL)
表 集合
行 文档
列 成员
主键 Object ID(自动维护的)
MongoDB数据库是发展最好的NoSQL数据库,因为它与Node.js捆绑在一起了。从事Node.js开发,一定要使用MongoDB。
MongoDB之所以能够更好的发展也取决于:面向集合的存储过程,模式自由(无模式)、方便地进行数据的
存储扩充、支持索引、值短暂数据保留、具备完整的数据库状态监控、基于BSON应用
二、MongoDB启动
刚安装完成之后,严格来讲不能够在Windows下使用,需要为他配置path环境。
配置目录:D:\MongoDB\bin
新建一个文件夹,这个文件夹将保存所有的数据库信息。(db文件夹)
MongoDB数据库的启动需要使用mongod.exe命令完成,可以设置端口号。
1.不设置端口号启动MongoDB服务:
mongod --dbpath D:\MongoDB\db
当MongoDB服务启动之后,可以使用mongo命令连接数据库,连接后显示:
MongoDB shell version: 3.2.10
connecting to: test
查询数据库
show databases;
只有local数据库,但是这个数据库不适用
此时,虽然实现了数据库的连接,但是没有实际意义。
若日后要通过程序访问数据库的话,要设端口号
2.设置端口号启动MongoDB服务:
mongod --dbpath D:\MongoDB\db --port=27001
1、>启动的要配置一些参数端口号、是否启用用户验证、数据文件的位置等等
在D:\MongoDB目录下建立文件“mongodb.conf”
#设置数据目录的路径
dbpath = D:\MongoDB\db
#设置日志信息的文件路径
logpath = D:\MongoDB\log\mongodb.log
#打开日志输出操作
logappend = true
#不使用验证登录
noauth = true
port = 27001
2、>重新启动MongoDB数据库服务
1、切换到admin数据库 use admin
2、关闭数据库 db.shutdownServer()
3、重新启动
用配置文件启动:
mongod -f D:\MongoDB\mongodb.conf
3、>服务器已有端口号,不能直接用mongo命令(要指定端口号)
C:\Users\YJDN>mongo --port=27001
MongoDB shell version: 3.2.10
connecting to: 127.0.0.1:27001/test
三、简单的数据库操作
1、使用数据库:use 数据库名; ------------此时不会创建数据库,只有在数据库里面保存数据之后才创建
2、查看所有数据库:show databases ; ------只有local数据库
3、创建集合:db.sreateCollection(“集合名”); -----数据库才真正存在
4、查看集合:show collections;
5、删除集合:db.集合名称.drop();
6、删除数据库:db.dropDatabae();----------删除当前所在的数据库,所以在删除之前,要切换到给数据库
四、关于ID的问题
在MongoDB集合中的每一行记录会自动生成一个“_id”:例如:"_id" : ObjectId("582fc4830f537b6768a8fa0e"
ObjectId的组成:时间戳+机器码+PID+计数器
时间戳:前4 个字节是从标准纪元开始的时间戳,单位为秒。这会带来一些有用的属性。时间戳,与随后的.
5个字节组合起来,提供了秒级别的唯一性。
由于时间戳在前,这意味着ObjectId 大致会按照插入的顺序排列。这对于某些方面很有用,如将其作为索引提高效率,
但是这个是没有保证的,仅仅是“大致”。
这4 个字节也隐含了文档创建的时间。绝大多数驱动都会公开一个方法从ObjectId 获取这个信息。
因为使用的是当前时间,很多用户担心要对服务器进行时间同步。其实没有这个必要,因为时间戳的实际值并不重要,
只要其总是不停增加就好了(每秒一次)。
机器码:接下来的3 字节是所在主机的唯一标识符。通常是机器主机名的散列值。这样就可以确保不同主机生成不同的ObjectId,不产生冲突。
PID:为了确保在同一台机器上并发的多个进程产生的ObjectId 是唯一的,接下来的两字节来自产生ObjectId 的进程标识符(PID)。
计数器:前9 字节保证了同一秒钟不同机器不同进程产生的ObjectId 是唯一的。后3 字节就是一个自动增加的计数器,
确保相同进程同一秒产生的ObjectId 也是不一样的。
同一秒钟最多允许每个进程拥有2563(16 777 216)个不同的ObjectId。
五、数据操作;
一些主要的函数(以dept为例):
db.dept.remove(); 全部删除,括号内有条件则删除满足条件的数据。
db.dept.find(); 查找全部数据(数量不多的情况下全部显示出来)
db.dept.findOne(); 查找一条数据
db.dept.update(数据);更新数据
db.dept.insert(数据);插入数据