一、MongoDB数据库

1、概念

数据库(DataBase)是一个按照数据结构进行数据的组织,管理,存放数据的仓库。

2、关系型数据库

按照关系模型存储的数据库,数据与数据之间的关系非常密切,可以实现跨数据表查询数据,占用更少的硬盘实现更多的数据存储

T-SQL标准的结构化查询语言,是关系型数据库的通用查询语言

常见的关系型数据库:Mysql sql-server access sqlite.....

结构:一台服务器》数据库》数据表==》数据行

3、非关系型数据库

不按关系模型存储的数据库,统称为nosql

第一层含义:不是SQL,不是关系型数据库

第二层含义:Not Only SQL,不仅仅是SQL

结构:一台服务器》数据库=》集合==》文档

4、mongDB

mongoDB 是一个基于分布式文件存储的数据库,目前是世界上用得最多的非关系型数据库,也是最像关系型的非关系型数据库

MongoDB以BSON(二进制+JSON)格式进行数据存储,可以直接存储,可以直接存储对象、数组

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。

使用

  • 官网下载安装mongoDB软件

  • 设置环境变量,mongo命令所在位置:C:\program Files\MongoDB\server\3.2\bin 添加到环境变量 修改用户下PATH的值

创建文件夹

在非系统盘根目录创建一个文件夹mongodb,在创建两个子文件夹db和log

将mongoDB挂载成为windows服务

  • 1.使用命令挂载服务

mongod --dbpath "d:\mongodb\db" --logpath "d:\mongodb\log\mongod.log" --install --serviceName "MongoDB"

  • 2.使用服务窗口界面启动服务

在计算机点右键管理--->服务与应用程序---->服务----->找到MongoDB右键启用

  • 3.或者使用命令行启动服务

net start mongodb 开启服务

net stop mongodb 关闭服务

sc delete mongodb 卸载服务

常见问题

32位操作系统 必须加 --storageEngine mmapv1

windows8 windows10 打开命令行用管理员方式打开

5、数据库常用操作

进入数据库管理模式

  • 在命令行中运行:mongo 进入数据管理模式
  • 在数据管理模式中只能执行数据库命令,不能执行其他命令
  • exit 退出数据库管理模式

数据库命令:

  • 1.显示所有的数据列表

    show dbs
  • 2.创建数据库/进入数据库

    use 数据库名

    如果数据库名不存在,则创建

    如果数据库已存在,则进入
  • 3.查看当前数据库是谁

    db
  • 4.删除数据库

    db.dropDatabase()

集合命令:

  • 1.显示当前数据库中所有集合

    show collections
  • 2.创建集合

    db.集合名.insert({})

    通常,在创建数据时自动创建集合,不需要单独创建
  • 3.删除集合

    db.集合名.drop()

文档(数据)的操作

  • 1.新增文档 (增)

    db.集合名.insert({})

    db.集合名.save({JSON数据})

    • 例如:
    db.user.insert({"name":"admin","password":"12342423"});
    db.user.save({"username":"admin","password":"12342423"}); /* insert和save方法的区别:
    .insert() 向集合中插入一条数据【推荐使用】
    .save() 向集合中添加一条数据,如果集合中已存在该数据则更新
    */
  • 2.删除数据(删)

    db.集合名.remove({}) //删除当前集合中的所有数据

    db.集合名.remove({条件}) //删除指定的数据

    • 例如:
    db.user.remove({"age":"18"})
    
    // 注意:由于删除和更新会对数据造成极大影响,需谨慎
  • 3.修改数据(改)

    db.集合名.update({查找对象,修改结果})

    • 注意,会修改整条数据
    • 例如:
    db.user.update({"name":"张三"},{"age":18}) //改动整条数据
  • 4.查看文档数据(查)

    db.集合名.find() //查找当前集合中的所有数据

    db.集合名.find({条件对象}) //将符合条件的数据查出来

    db.集合名.findOne() //查询到的第一个对象

    db.集合名.find().pretty() //将找到的数据已格式化的结果显示出来

6、mongoDB高级用法

按指定条件查询

  • 大于 - $gt
db.集合名.find({字段名:{$gt:值}})
  • 大于等于 - $gte
db.集合名.find({字段名:{$gte:值}})
  • 小于 - $lt
 db.集合名.find({字段名:{$lt:值}})
  • 小于等于 - $lte
db.集合名.find({字段名:{$lte:值}})
  • 使用 (<) 和 (>) 查询指定范围
db.集合名.find({字段名:{$gt:小值,$lt:大值}})
  • 使用数组指定范围 - $in
db.集合名.find({字段名:{$in:[1,2,3,4]}})
  • 查找数组元素个数 - $size
db.集合名.find({字段名:{$size:长度}})
  • 判断是否存在 - $exists
db.集合名.find({字段名:{$exists:true|false}})
  • 查找多个条件时,符合其中一个就找出来 - $or
db.集合名.find({字段名:{$or:[{...},{...},...]}})

排序

db.集合名.find().sort({"key":-1,"ke2":1,...}) //1代表升序,-1代表降序

限定输出limit() skip()

db.集合名.find().limit('数字') //限定输出数据的条数
db.集合名.find().skip('数字') //跳过指定的数据条数 //这两个限定输出的语句主要用于分页

模糊查询

db.集合名.find({字段名:/值/ig}) //使用正则表达式

二、mongoose操作数据库

1、概念

是一个基于nodeJS的用于操作mongodb数据库的第三方模块

2、安装

npm install mongoose

3、使用

在routes目录下,在需要用到数据库的路由添加如下代码:

var mongoose = require('mongoose');
//连接数据库
mongoose.connect("mongodb://主机名:27017/数据库名",function(err){
if(err){
throw err;
}else{
console.log("数据库连接成功");
}
}) //定义骨架
//schema骨架是一种数据结构声明,不具备数据库的操作能力
//骨架类型:String、Number、Date、Buffer、ObjectId、Array...
var userSchema = new mongoose.Schema({
name:String,
age:{
type:Number,
default:0
},
sex:{
type:String
}
}) //创建模型
//model模型是一种根据骨架创建出的一个模型,具备数据库操作能力,通常用于读取数据库
var listModel = mongoose.model("模型名称","骨架","集合名称"); //创建实体Entity
//Entity实体是根据模型创建出的一个实例,具备数据库操作能力,通常用于写数据(新增,修改,删除)
var list = new listModel();
list.属性名 = 值;
list.save(); //将添到实例上的属性保存到数据库中
list.remove();//删除数据

4、数据操作

查询数据/读取数据

//根据条件进行数据查询,可以找出多条数据
模型.find({条件},function(err,data){
//data是从数据库中读取到的数据
//find方法找出来的数据一定是一个数组,即使没有数据也是一个空数组
}) //通过ID查找一条数据
模型.findById('id',function(err,data){
//find方法找出来的数据一定是一个对象
}) //另一种常用方法(为了实现更好的链式调用)
模型.find({条件}).exec(function(err,data){})

新增数据

var list = new listModel(); //根据模型创建实例
list.name = '张三';
list.age =23;
//将新增的数据保存到数据库中
list.save(function(err){
console.log("新增成功");
}) //注意:骨架中没有定义的属性及类型,不能添加到数据库

删除数据

/*
思想:
第一步:找出要被删除的数据,
第二部:调用remove()方法删除数据
*/
listModel.findById(id).exec(function(err,data){
data.remove(function(err){});
})

修改数据

/*
思想:
第一步:找出要被修改的数据,
第二部:将数据修改后保存回数据库
*/
listModel.findById(id).exec(function(err,data){
data.name = 新的值;
data.age = 新的值;
...
data.save(function(err){})
})

nodeJS从入门到进阶三(MongoDB数据库)的更多相关文章

  1. NodeJs之EXCEL文件导入导出MongoDB数据库数据

    NodeJs之EXCEL文件导入导出MongoDB数据库数据 一,介绍与需求 1.1,介绍 (1),node-xlsx : 基于Node.js解析excel文件数据及生成excel文件. (2),ex ...

  2. nodeJS中使用mongoose模块操作mongodb数据库

    在实际运用中,对于数据库的操作我们不可能一直在cmd命令行中进行操作,一般情况下需要在node环境中来操作mongodb数据库,这时就需要引入mongoose模块来对数据库进行增删改查等操作. 首先, ...

  3. nodejs读取json文件,写入mongodb数据库

    最近又一点时间,开始使用mongodb存储json模型文件,然后可以实现模型文件的在线编辑和管理.今天上午实现了json文件入库的代码,如下: var fs=require("fs" ...

  4. nodeJS从入门到进阶一(基础部分)

    一.Node.js基础知识 1.概念 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是JavaScript的运行环境 Node.js 使用了一个事件驱动.非阻塞 ...

  5. nodejs之使用express框架连接mongodb数据库

    var express = require('express');var router = express.Router();var app = express();var MongoClient = ...

  6. nodeJS从入门到进阶二(网络部分)

    一.网络服务器 1.http状态码 1xx: 表示普通请求,没有特殊含义 2xx:请求成功 200:请求成功 3xx:表示重定向 301 永久重定向 302 临时重定向 303 使用缓存(服务器没有更 ...

  7. MongoDB索引(一) --- 入门篇:学习使用MongoDB数据库索引

    这个系列文章会分为两篇来写: 第一篇:入门篇,学习使用MongoDB数据库索引 第二篇:进阶篇,研究数据库索引原理--B/B+树的基本原理 1. 准备工作 在学习使用MongoDB数据库索引之前,有一 ...

  8. 前端笔记之NodeJS(四)MongoDB数据库&Mongoose&自制接口&MVC架构思想|实战

    一.MongoDB数据库 1.1 NoSQL简介 随着互联网web2.0网站的兴起,传统的SQL数据库(关系数据库)在应付web2.0网站,特别是超大规模和高并发的SNS(social network ...

  9. NodeJs连接操作MongoDB数据库

    NodeJs连接操作MongoDB数据库 一,介绍 MongoDB是一种文档导向数据库管理系统,由C++撰写而成.介绍如何使用 Node.js 来连接 MongoDB,并对数据库进行操作. Mongo ...

随机推荐

  1. 解析prototxt文件的python库 prototxt-parser(使用parsy自定义文件格式解析)

    解析prototxt文件的python库 prototxt-parser https://github.com/yogin16/prototxt_parser https://test.pypi.or ...

  2. 源码编译Redis Desktop Manager ---(转载)

    精美文章转载: 版权声明:本文作者为「Kany.Wang」,本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议.转载请注明出处!原文链接:https://kany.me/20 ...

  3. openwrt如何打开linux内核的CONFIG_DEVMEM选项?

    答: 直接在openwrt的make menuconfig中打开CONFIG_KERNEL_DEVMEM选项即可

  4. iOS项目运行出现:[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object

    说白了就是 字典初始化 的时候 放入空的值了 下面这个比较具体 错误原因: NSDictionary *dic = @{@"key":value}这个初始化方法,发现keys co ...

  5. ubuntu连接多个realsense d435

    ubuntu连接多个realsense d435 import pyrealsense2 as rs import numpy as np import cv2 import time import ...

  6. 在OpenShift 3.11环境开启多网络平面

    1.整体架构 Multus CNI是OpenShift的容器网络接口(CNI)插件,可将多个网络接口附加到Pod. 通常,在OpenShift中,每个Pod仅具有一个网络接口(除了回送),Multus ...

  7. Django框架 + Djiango安装 + First Djiango + 常用命令

    一.Django框架 MVC框架和MTV框架 参考:https://www.cnblogs.com/taosiyu/p/11260016.html MVC,全名是Model View Controll ...

  8. 【DL基础】GridSearch网格搜索

    前言 参考 1. 调参必备---GridSearch网格搜索: 完

  9. Jmeter(一) Jmeter基本使用

    1.下载安装 官方网站 https://jmeter.apache.org/download_jmeter.cgi 选择下载即可 2.基本使用 下载解压后,目录如下: 进入到bin目录, 双击jmet ...

  10. [ARM-Linux开发]Linux open函数

    Linux open函数 open 函数用于打开和创建文件.以下是 open 函数的简单描述 #include <fcntl.h> int open(const char *pathnam ...