学习 MongoDB 数据库

MongoDB

1. 关系型数据库和非关系型数据库

  • 关系型数据库:表与表之间存在关系
    • 所有的关系型数据库都需要通过sql语言来操作
    • 所有的关系型数据库在操作之前都要设计表结构
    • 数据表支持约束
      • 唯一
      • 主键
      • 默认值
      • 非空
  • 非关系型数据库
    • 有一些非关系型数据库就是 key-value 键值对
    • 非常灵活

2. MongoDB 介绍

菜鸟教程:https://www.runoob.com/nodejs/nodejs-mongodb.html

sqlmongo说明
databasedatabase数据库
tablecollection数据库表/集合(就是 js 数组)
rowdocument数据记录行/文档
columnfiled字段/域
indexindex索引
table joins表连接,mongo 不支持
primary keyprimary key主键,mongo 自动将 _id 设置为主键
  • 和关系型数据库很像
  • 不需要设计表结构
  • 可以任意往里面存数据,没有结构性限制
基本结构
  • 数据库
    • 集合
      • 文档
{
  // 每一个数据库就是一个对象
  qq: {
    // 每一个集合就是一个存储数据的数组,相当于表
    users: [
      // 每一条数据都是一个对象,称之为文档,相当于表记录
      {name: '张三1', age: 18},
      {name: '张三2', age: 19},
      {name: '张三3', age: 20},
      {name: '张三4', age: 21}
      ...
    ],
    products: [
      
    ]
    ...
  }
  taobao: {
    
  }
}

3. 在 Mac 上安装 MongoDB

# 进入 /usr/local
cd /usr/local

# 下载
sudo curl -O https://fastdl.mongodb.org/osx/mongodb-osx-ssl-x86_64-4.0.9.tgz

# 解压
sudo tar -zxvf mongodb-osx-ssl-x86_64-4.0.9.tgz

# 重命名为 mongodb 目录
sudo mv mongodb-osx-x86_64-4.0.9/ mongodb

# 安装完成后把二进制文件添加到PATH路径中
export PATH=/usr/local/mongodb/bin:$PATH

# 检查是否安装成功
mongod --version
附:mac 上配置环境变量

/etc/profile (建议不修改这个文件)全局(公有)配置,不管哪个用户,登录时都会读取该文件。
/etc/bashrc (一般在这个文件中添加系统级环境变量)
~/.bash_profile (一般在这个文件中添加用户级环境变量)

查看已经配置的PATH

echo $PATH

配置:

# 进入当前用户根目录
cd ~/ 
# 创建
touch .bash_profile 
# 用文本编辑器打开
open -e .bash_profile 
# 立即生效 
source .bash_profile 

.bash_profile中的内容:

# MongoDB
MONGODB_HOME=/usr/local/mongodb
export PATH=$PATH:$MONGODB_HOME/bin
# 如果要配置多个,直接在下面添加即可

4. 使用 MongoDB

启动和关闭数据库

启动:

# mongodb 默认使用执行 mongod 命令所处的盘符下的 /data/db 作为数据存储目录
# 第一次必须手动创建一个
# Mac 必须要更改权限才能启动
sudo mongod

如果想要更改默认的数据存储路径,可以:

mongod --dbpath=路径

停止:Ctrl + C

连接和退出数据库
# 该命令默认连接本机 MongoDB 服务
mongo
# 退出
exit
基本命令
  • show dbs查看所有数据库
  • db查看当前操作的数据库
  • use 数据库名称切换到指定的数据(如果没有就新建)
  • show collections查看当前数据库集合
  • db.collection.find()查询集合中的数据

5. mongoose

官网 http://www.mongoosejs.net/

起步
const mongoose = require('mongoose');
// 连接的数据库不需要存在,当你创建第一条记录的时候会自动被创建出来
mongoose.connect('mongodb://localhost/test');

const Cat = mongoose.model('Cat', { name: String });

const kitty = new Cat({ name: 'Zildjian' });
kitty.save().then(() => console.log('meow'));
设计 Schema,发布 model
  1. 连接数据库
mongoose.connect('mongodb://localhost/test')
  1. 设计文档结构

    • 每一个字段对应 Schema 对象里面的一个属性,可以对属性添加约束,约束的目的就是保证数据的一致性

    • 每一个 schema 都会映射到一个 MongoDB collection ,并定义这个 collection 里的文档的构成。

var Schema = mongoose.Schema
var userSchema = new Schema({
 username: {
  type: String, // 类型
  require: true // 是否必须
 },
 password: {
  type: String,
  require: true
 },
 email: {
  type: String
 }
})
  1. 将文档结构发布为模型(mongoose.model 方法就是将一个架构(Schema)发布为 model)
    • 第一个参数:传入一个大写名词单数字符串来表示你的数据库名称,Mongoose 会自动生成 model 名字复数形式的 collection
      • User --> users
    • 第二个参数:架构
var User = mongoose.model('User', userSchema);
  1. 当我们有了模型构造函数之后,就可以操作 users 中的数据了
5.1 增加数据
var user = new User({
	username: 'admin',
	password: '123',
	email: 'admin@qq.com'
})
// 保存到数据库中
user.save(function (err, result) {
	if (err) {
		console.log('保存失败')
		return
	}
	console.log('保存成功')
	console.log(result)
})
5.2 查询数据
  1. 查询所有数据
User.find(function (err, result) {
	if (err) {
		console.log('查询失败');
		return;
	}
	console.log('查询成功');
	console.log(result);
})
  1. 按条件查询
User.find({
  // 查找 username 为 admin 的数据
	username: 'admin'
}, function (err, result) {
  //...
})
  1. 按条件查询单个数据
User.findOne({
  // 查找 username 为 admin 的数据
	username: 'admin'
}, function (err, result) {
  //...
})

find查询出来的数据存放在数组里面,哪怕只有一条数据

findOne只查询匹配的第一条数据,返回的是一个对象

5.3 删除和更新数据
/**
 * 删除数据
 */
User.remove(function (err, result) {
	if (err) return handleError(err);
	// removed! 这是删除所有
	console.log('删除成功')
});

/**
 * 更新数据
 */
User.findByIdAndUpdate('5d84932162fa221093ca2a90', {
 username: 'test'
}, function (err, result) {
 if (err) {
  console.log('更新失败');
  return;
 }
 console.log('更新成功');
 console.log(result);
})

这些方法官方已经不推荐使用,具体用的时候看文档https://mongoosejs.com/docs/api.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值