前言

对于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: ,

ordered:

}

)

//查询文档

db.collection.find({id:3})

//修改文档

db.collection.update({id:3},{test:'555'})

//删除文档

db.test.remove({id:4})

复制代码

操作符

(>) 大于 - $gt

(

(>=) 大于等于 - $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基础篇相关推荐

  1. python数据查询教程_Python数据可视化教程之基础篇

    经过学习之后,我总结了利用python实现可视化的三个步骤: 确定问题,选择图形 转换数据,应用函数 参数设置,一目了然 1 首先,要知道我们用哪些库来画图? matplotlib python中最基 ...

  2. 0基础python入门书籍 excel_【曾贤志】从零基础开始用Python处理Excel数据 - 第1季 基础篇...

    =====[曾贤志]从零基础开始用Python处理Excel数据 第1季 基础篇====== 1-1 什么是python? .mp4 1-2 为什么要学习用Python处理Excel表格? .mp4 ...

  3. 数据包工具--Scapy基础篇

    数据包工具--Scapy基础篇 零.前言 一.Scapy是什么? 二.Scapy基础 1 利用pip安装库 2 基本使用 2.1 conf变量 2.2 lsc()方法 2.3 ls()方法 3 发送数 ...

  4. mongodb的delete_大数据技术之MongoDB数据删除

    本篇文章探讨了大数据技术之MongoDB数据删除,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入. 1.查看集合 show collections 2.向集合中添加数据 db.ru ...

  5. mongodb 存储过程 遍历表数据_使用MongoDB存储数据

    在 Ubuntu14.04 上安装 Install MongoDB Community Edition 1. Import the public key used by the package man ...

  6. 大数据 - 文本文件数据提取工具之一 基础篇常见文本格式

    基础篇如何正确的拆分常见的文本格式, 什么样的字符能做拆分符号,理论上所有的字符都可以作为拆分符号用来拼接多列数据, 在拆分列数据的时候,数据里面不能再有这个拆分符号一样的字符串,否则数据就无法分开了 ...

  7. MongoDB 查询昨日/昨天数据

    //第一种写法 db.getCollection('table').find({create_at: {$gte: newDate('2017-11-08').getTime(),$lt: newDa ...

  8. mongodb 导出一条数据_将 MongoDB 导出成 csv

    [摘要] 将 Mongodb 数据结构转换成结构化的数据需求,我们可利用集算器 SPL 语言来进行辅助实现.若想了解更多,请前往乾学院:将 MongoDB 导出成 csv! 来源:https://pl ...

  9. MongoDB查询报错:class com.mongodb.MongoSecurityException: Exception authenticating MongoCredential...

    异常日志: 2019-05-30 10:10:24,252 [http-nio-8080-exec-1] DEBUG [java.sql.Connection] - ooo Connection Op ...

最新文章

  1. 开发者被要求向破解者道歉,竟揪出“阿里云假员工”,网友:这人有前科
  2. 四十二、深入Java中的文件读取操作
  3. python+selenium自动登录qq空间并下载相册
  4. scanner close_Java Scanner close()方法与示例
  5. linux nginx F配置,linux下nginx的安装及配置
  6. erp系统是什么软件
  7. hive sql 怎么实现循环_shell中循环调用hive sql 脚本的方法
  8. 腾讯会议发布3.0版本;微软将推出元宇宙产品;Firefox启动最大WebRTC升级|WebRTC风向
  9. php扫描图片条形码,php如何生成条形码图片(附代码)
  10. 纸牌游戏——小猫钓鱼(队列、栈)
  11. html怎么把字做成动画效果,用纯CSS实现文字的动态效果
  12. mac环境下搭建frida环境并连接网易mumu模拟器
  13. Google Play支付 接入配置
  14. Hive中orderBy,sortBy,distribute by,cluster by,group by
  15. Aleo Wagyu钱包
  16. verilog “function”函数一直报错解决办法
  17. Java定时任务技术分析
  18. jpg怎么转换doc
  19. 交互式多模型 IMM的原理
  20. R语言中如何编写自己的函数初步入门

热门文章

  1. STL之set_union、set_intersection、set_difference、set_symmetric_difference
  2. 操作系统和Linux
  3. 标签选择器与字体连写
  4. Python中文问题
  5. 中国能源变革令西方相形见绌
  6. [MySQL]SQL
  7. Apache Ant 简介和配置
  8. 一分钟了解阿里云产品:ESC五大热点技术问题分析
  9. 模式识别之聚类算法k-均值---k-均值聚类算法c实现
  10. Unity3d读取.csv文件