MongoDB
标签(空格分隔): 数据库
1. 前言
MongoDB是一个数据库。是介于关系数据库和非关系数据库之间的产品,是非关系数据库中功能最丰富,最像关系数据库的。
1.1 NoSQL(not only SQL)
- 关系数据库管理系统(RDBMS).
- 关系模型非常适合于客户服务器变成,世界否花数据存储和商务应用的主导技术。
- NoSQL是全新的数据库革命性运动,擅长运用非关系的数据存储。
- NoSQL用于超大规模数据存储(谷歌或Facebook每天为用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
1.2 RDBMS VS NoSQL
RDBMS
- 高度组织结构化数据
- 结构化查询语言(SQL)
- 数据和关系都存储在单独的表中
- 数据操纵语言,语言定义数据
- 严格的一致性
- 基础事务
NoSQL
- 代表着不仅仅是SQL
- 没有声明性查询语言
- 没有预定义的模式
- 键值对存储、列存储、文档存储、图形数据库
- 最终一致性,而非ACID属性
- 非结构化和不可预知的数据
- CAP定理
- 高性能,高可用性和可伸缩性
1.3 关系型数据库和非关系型数据库
-
关系指的是表和表之间存在关系
-
所有的关系型数据库都需要
SQL
语言来操作 -
所有的关系型数据库在操作前都需要设计表结构
-
数据表支持约束
- 唯一的
- 主键
- 默认值
- 非空
-
非关系数据库非常的灵活
- 数据库==》数据库
- 数据表==》集合(数组)
- 表记录==》文档对象
-
MongoDB不需要设计表结构
-
可以任意往里面存数据
1.4
2. 安装
- 去www.mongodb.com下载安装包
- 安装包安装完成后
- 配置环境,进入文件安装目录直到/bin内,然后在左侧的此电脑图标上右键单击选择属性,高级系统设置,环境变量,点击Path,新建,将bin所在的文件位置复制放在空白栏中确定即可。
- 在安装盘根目录下创建一个data/db文件夹,作为存放文件的默认位置
- 开启:命令提示符输入 mongod回车即可启动
- 关闭:ctrl+c即可关闭
- 连接数据库:mongo回车
- 断开连接:在连接状态输入exit回车
3. 基本命令(命令提示符输入)
show dbs
查看数据库列表db
查看当前操作的数据库use 数据库的名称
切换到指定数据库(如果没有会新建)db.students.insertOne({"name":"Jack"})
插入一条数据show collections
显示集合db.students.find()
显示所有数据
4. 在Node中使用MongoDB
4.1 使用官方的MongoDB
包来操作
node-mongodb-native
4.2 使用第三方mongoose
来操作
mongoose
:是基于官方包进行了再一次的封装- 官方网址:mongoosejs.com
-
- 官方网站上有许多API,我只是试用了如下的API,有其他需求请去官网查询
4.3 (创建)增加数据库数据
- 设计Schema,发布Model
var mongoose=require('mongoose')
var Schema=mongoose.Schema
mongoose.connect('mongodb://localhost/flower',{useMongoClient:true})
//设计集合结构
var flowerSchema=new Schema({
flowername:{
type:String,
required:true
},
florescence:{
type:String,
required:true
},
Pharmacodynamics:{
type:String
}
})
//将文档结构发布为模型(大写名词单数)
var Flower=mongoose.model('Flower',flowerSchema)
- 增加数据
var Rose=new Flower({
flowername:"Rose",
florescence:"4-5月",
Pharmacodynamics:"其性甘微苦,温、无毒。入肝脾二经。 功效:理气解郁、和血散瘀。主治肝胃气痛,新久风痹,吐血咯血,月经不调,赤白带下,痢疾、乳痈,肿毒。《食物本草》谓其“主利肺脾、益肝胆,食之芳香甘美,令人神爽"
})
//持久化存储数据
Rose.save(function (err,ret) {
if(err){
console.log("数据保存失败")
}else{
console.log("保存成功")
console.log(ret)
}
})
- 查询数据
//查询数据库所有数据(在所有数据存入数据库之后),数组[]形式
Flower.find(function (err,ret) {
if(err){
console.log("查询失败")
}else{
console.log(ret)
}
})
//按照条件查询数据库数据,[]形式
Flower.find({
flowername:'Pansy'
},function (err,ret) {
if(err){
console.log("查询失败")
}else{
console.log(ret)
}
})
//查询一个数据,{}形式,没有条件查询第一个
Flower.findOne({
flowername:"Pansy",
florescence:"4-7月"
},function (err,ret) {
if(err){
console.log("查询失败")
}else{
console.log(ret)
}
})
删除数据
//按照条件查询数据库数据,删除几个会有提示,所有符合条件的都会被删除
Flower.remove({
flowername:'Pansy'
},function (err,ret) {
if(err){
console.log("删除失败")
}else{
console.log(ret)
}
})
更新内容
//按照条件更新数据,第一个参数是id,第二个参数是更改内容,第三个参数是回调函数
Flower.findByIdAndUpdate('查询数据库可以看到生成的id',
{flowername:'Sun'},
function(err,ret){
if(err){
console.log('更新失败')
}else{
console.log('更新成功')
console.log(ret)
}
})