服务器端知识库mongodb基础篇

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 对于nodejs而言,标配但数据库便是mongodb了。而我认为nodejs对于mongodb的操作最为便捷的插件之一就是mongoose,所有我们去掌握mongoose的基本配置就很有必要了,本章主要和大家分享下mongoose的学习使用经验。

前言


对于nodejs而言,标配但数据库便是mongodb了。而我认为nodejs对于mongodb的操作最为便捷的插件之一就是mongoose,所有我们去掌握mongoose的基本配置就很有必要了,本章主要和大家分享下mongoose的学习使用经验。

网络异常,图片无法展示
|

操作使用


首先我们需要了解mongodb是一款什么样的数据库,MongoDB 是一个介于关系数据库和非关系数据库之间的开源产品,是最接近于关系型数据库的 NoSQL 数据库。

安装mongodb

//ubuntu
sudo apt-get install mongodb
//centos
sudo yum install mongodb

注:window/mac系统官网下载安装包

启动数据库

//window环境启动
1、打开命令窗口,切换到mongodb安装目录下的“bin”目录中。
2、启动服务。输入命令:mongod --dbpath ***\MongoDB\data
 注:--dbpath指定数据库存放目录(目录需要提前建好)
3.命令行打印启动信息则启动成功
4.在浏览器中输入http://localhost:27017/可以打开一个mongodb提示页面
//linux环境启动(ubuntu为例)
1.sudo service mongodb start
2.打印启动信息

连接mongodb常用工具

  • 开源工具compass:免费,界面简洁,不支持 sql 查询,支持性能监控
  • studio 3t:收费,但是可以免费试用30天。支持导入导出,支持 sql 查询,支持语法填充,功能丰富
  • 其他的如:NoSQLBooster robot 3t ...

注:mongodb默认没有权限认证,所以我们在使用gui工具是只用输入host和端口好就可以连接。

权限设置(ubuntu为例)

  • 创建用户
//进入命令行
mongo
//使用admin
use admin
//创建管理用户
db.addUser('admin','112233')
//创建其他数据库用户
use test
db.addUser('test','112233')

创建成功,Successfully added user: { "user" : "admin", "roles" : [ "root" ] }

  • 修改配置文件
//打开配置文件/etc/mongodb.conf
vim /etc/mongodb.conf
auth=true

记得保存后退出文件编辑

  • 重启服务
//重启服务是配置生效
service mongodb restart
  • 测试权限
mongo
show databases;
报错:
/**
2020-08-09T22:56:34.914+0800 listDatabases failed:{
  "ok" : 0,
  "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
  "code" : 13
} at src/mongo/shell/mongo.js:47
*/
//登录
use admin;
db.auth('admin','112233')//1
show databases;
//显示所有数据
  • 查询所有用户
use admin;
db.auth('admin','112233')
show collections;
/**
    system.indexes
    system.users
    system.version
*/
db.system.users.find()

注:mongodb默认没有开启权限认证,所以大家在使用前一定要先开启这块功能。

基本操作,常用sql命令

  • 数据库类
//创建数据库连接成功使用use创建并切换数据库
use test;
//查询数据库
show dbs;
//查询当前使用数据库
db;
//删除数据库
db.dropDatabase();
  • 集合类
//创建集合
db.createCollection('test',{})
//查询集合
show collections;
//查询集合所有文档
db.collection.find();
  • 文档类
//插入文档
db.collection.insert({id:3,test:'33'})
db.collection.save({id:3,test:'33'})
//插入多条
db.collection.insertMany(
   [  ],
   {
      writeConcern: <document>,
      ordered: <boolean>
   }
)
//查询文档
db.collection.find({id:3})
//修改文档
db.collection.update({id:3},{test:'555'})
//删除文档
db.test.remove({id:4})
  • 操作符
(>) 大于 - $gt
(<) 小于 - $lt
(>=) 大于等于 - $gte
(<= ) 小于等于 - $lte

基本概念


数据持久化方式

MongoDB 是一个基于分布式文件存储的数据库。 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

  • 存储方式:虚拟内存+持久化
  • 非关系型:就是没用遵循关系代数模式的数据库。
  • 数据处理:数据是存储在硬盘上的,只不过需要经常读取的数据会被加载到内存中,将数据存储在物理内存中,从而达到高速读写。

实例 数据库 集合 文档 字段

  • 实例:mongodb的服务
  • 数据库:MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。
  • 集合:
1.MongoDB 文档组(类似关系型数据库中的表格)。
          2.在于数据库中并且没有固定的结构。
          3. 集合可以插入不同格式和类型的数据
  • 文档:
1.文档是一组键值(key-value)对(即 BSON)。
          2.MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型。

索引 聚合 复制

  • MongoDB使用 createIndex() 方法来创建索引。
db.collection.createIndex()
  • 类型如下:单字段索引、复合索引、多key索引、文本索引等,每种类型的索引有不同的使用场合。
1. 单字段索引 (Single Field Index)
上建立的BId这个索引就是一个定型的例子。
2.复合索引 (Compound Index)
复合索引的场景其实用到比单字段索引要多,或者说是单子段索引的扩充,因为毕竟很少通过单个参数去获取大量数据。
3.多key索引 (Multikey Index)
应用针对数组,如果为一个数组类型的key建立了索引,实际上是给数组中的每一个元素建立了一条索引。
  • 索引常用属性
1.唯一索引 (unique index):保证索引唯一性
2.TTL索引:可以针对某个时间字段,指定文档的过期时间
3.部分索引 (partial index): 只针对符合某个特定条件的文档建立索引
4.稀疏索引(sparse index): 只针对存在索引字段的文档建立索引,可看做是部分索引的一种特殊情况
  • MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
  • MongoDB复制是将数据同步在多个服务器的过程。复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。复制还允许您从硬件故障和服务中断中恢复数据。

mongodb运行监控

  • MongoDB中提供了mongostat 和 mongotop 两个命令来监控MongoDB的运行情况。
  • mongostat
//mongostat是mongodb自带的状态检测工具,在命令行下使用。它会间隔固定时间获取mongodb的当
//前运行状态,并输出。如果你发现数据库突然变慢或者有其他问题的话,你第一手的操作就考虑采用
//mongostat来查看mongo的状态
D:\set up\mongodb\bin>mongostat
  • mongotop
D:\set up\mongodb\bin>mongotop

常用插件之mongoose

对于nodejs开发者而言mongoose这款插件应该不陌生,我也是使用这款插件来入门的。

  • Mongoose 是 MongoDB 的一个对象模型工具,它对 MongoDB 的常用方法进行了封装,让 node.js 操作 MongoDB 更加优雅简洁。
  • 连接:一个简单的连接代码如下
// connection.js file
const mongoose = require('mongoose');
const conn = mongoose.createConnection('mongodb://127.0.0.1:27017/demo')
  • schema(数据结构):schema是mongoose里会用到的一种数据模式,可以理解为表结构的定义;每个schema会映射到mongodb中的一个collection,它不具备操作数据库的能力。简单一个schema如下
//定义一个简单的用户表
let mongoose = require('./db.js'), 
Schema = mongoose.Schema; 
let UserSchema = new Schema({ 
      username : { type: String,default:'' }, //用户名 
      password: {type: String}, //密码
      phone: {type: Number}, //手机号number类型
      create_date : { type: Date} //用户创建日期 
});
module.exports = mongoose.model('User',UserSchema);
  • model(操作数据):定义好了Schema,接下就是生成Model。model是由schema生成的模型,可以对数据库的操作
leg user = new User({
        username : 'demo', //用户名
        password: 'abcd', //密码
        phone: 12345678900, //年龄 
        create_date : new Date() 
      });
user.save(function (err, res) {}); 
  • 查询:在数据库使用我查询是我们使用频率最高的功能之一,下面简单介绍下mongoose中的查询功能
User.find({username: {gte: 21,lte: 65}}
    //常用操作符号
    $or    或关系
    $nor    或关系取反
    $gt    大于
    $gte    大于等于
    $lt     小于
    $lte    小于等于
    $ne 不等于
    $in 在多个值范围内
    $nin 不在多个值范围内
    $all 匹配数组中多个值
    $regex  正则,用于模糊查询
    $within  范围查询(基于LBS)

总结


作为一名程序员,我认为去了解多种数据库掌握一种数据库应该作为评估我们编程基本功的知识之一。本节主要是回顾自己所学所用中认为比较基础的mongodb知识,在下一节内容中将详细介绍mongodb的一些进阶使用和概念,如:复制和故障恢复 二进制数据存储 动态查询/完全索引/内部对象 模式自由


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
1月前
|
NoSQL 容灾 MongoDB
MongoDB主备副本集方案:两台服务器使用非对称部署的方式实现高可用与容灾备份
在资源受限的情况下,为了实现MongoDB的高可用性,本文探讨了两种在两台服务器上部署MongoDB的方案。方案一是通过主备身份轮换,即一台服务器作为主节点,另一台同时部署备节点和仲裁节点;方案二是利用`priority`设置实现自动主备切换。两者相比,方案二自动化程度更高,适合追求快速故障恢复的场景,而方案一则提供了更多的手动控制选项。文章最后对比了这两种方案与标准三节点副本集的优缺点,指出三节点方案在高可用性和数据一致性方面表现更佳。
|
2月前
|
SQL NoSQL Java
springboot操作nosql的mongodb,或者是如何在mongodb官网创建服务器并进行操作
本文介绍了如何在Spring Boot中操作NoSQL数据库MongoDB,包括在MongoDB官网创建服务器、配置Spring Boot项目、创建实体类、仓库类、服务类和控制器类,以及如何进行测试。
24 1
springboot操作nosql的mongodb,或者是如何在mongodb官网创建服务器并进行操作
|
5月前
|
存储 NoSQL 关系型数据库
MongoDB的配置服务器和复制机制
【7月更文挑战第2天】MongoDB配置服务器存储分片和权限元数据,支持在主节点故障时保持读服务。关键组件,性能影响显著。复制集包含Primary和Secondary,通过oplog实现数据同步,类似MySQL binlog。oplog的幂等性可能导致大量set操作,且大小受限,可能导致从节点需全量同步。读写分离提升效率,主从切换确保高可用。
58 0
|
7月前
|
存储 分布式计算 NoSQL
MongoDB的简介和安装(在服务器上)
MongoDB的简介和安装(在服务器上)
144 0
|
NoSQL JavaScript MongoDB
阿里云服务器部署个人网站(nodejs + mongodb)
阿里云服务器部署个人网站(nodejs + mongodb)
236 0
|
存储 NoSQL Linux
如何正确地使用 Docker 在云服务器上部署 MongoDB v6 数据库并连接
本篇文章将向各位读者介绍使用 Docker 在云服务器上部署 MongoDB v6,并使用免费的 Studio 3T 连接数据库。本文弥补了网上既有方案的一些不足,解决了一些部署中的常见问题,有助于提升部署效率。
1461 0
如何正确地使用 Docker 在云服务器上部署 MongoDB v6 数据库并连接
|
NoSQL MongoDB 数据库
MongoDB常用的操作(服务器、数据库、集合)
MongoDB常用的操作(服务器、数据库、集合)
2502 0
|
存储 弹性计算 缓存
在阿里云服务器上配置自动备份 MongoDB 数据库的操作
我是吃了没有提前备份数据的亏,因为一次误操作,删除了所有数据。阿里云的ECS服务器控制台有定时与自动化任务-自动备份数据服务,不免费。那么就自己动手来吧。
378 0
|
JavaScript Ubuntu 应用服务中间件
docsify快速部署搭建个人知识库(支持本地、服务器、虚拟机运行)
docsify快速部署搭建个人知识库(支持本地、服务器、虚拟机运行)
1735 0