1.MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。是世界上目前用的最广泛的nosql数据库

2.noSql 翻译过来 not only sql 不仅仅是sql 他就是一个非关系型数据库,它的特点:高性能、易部署、易使用,存储数据非常方便。
注:①关系型数据库,是指采用了关系模型来组织数据的数据库。

     关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。

     关系型数据库的优点:容易理解:二维表结构是非常贴近逻辑世界的一个概念,关系模型相对网状、层次等其他模型来说更容易理解。

               使用方便:通用的SQL语言使得操作关系型数据库非常方便。

             易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率

  ②非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。

3.mongodb的优点

  1/面向文档储存的数据库(BSON格式存储)
  2/具有丰富的查询指令
  3/支持索引
  4/具有分片系统
  5/无模式
注:①BSON是由10gen(mongodb)开发的一个数据格式,目前主要用于MongoDB中,是MongoDB的数据存储格式。BSON基于JSON格式,选择JSON进行改造的原因主要是JSON的通用性及JSON的schemaless的特性。
  BSON主要会实现以下三点目标:

  1/更快的遍历速度
  对JSON格式来说,太大的JSON结构会导致数据遍历非常慢。在JSON中,要跳过一个文档进行数据读取,需要对此文档进行扫描才行,需要进行麻烦的数据结构匹配,比如括号的匹配,而BSON对JSON的一大改进就是,它会将JSON的每一个元素的长度存在元素的头部,这样你只需要读取到元素长度就能直接seek到指定的点上进行读取了。

  2/操作更简易对JSON来说

  数据存储是无类型的,比如你要修改基本一个值,从9到10,由于从一个字符变成了两个,所以可能其后面的所有内容都需要往后移一位才可以。而使用BSON,你可以指定这个列为数字列,那么无论数字从9长到10还是100,我们都只是在存储数字的那一位上进行修改,不会导致数据总长变大。当然,在MongoDB中,如果数字从整形增大到长整型,还是会导致数据总长变大的。

  3/增加了额外的数据类型
  JSON是一个很方便的数据交换格式,但是其类型比较有限。BSON在其基础上增加了“byte array”数据类型。这使得二进制的存储不再需要先base64转换后再存成JSON。大大减少了计算开销和数据大小。当然,在有的时候,BSON相对JSON来说也并没有空间上的优势,比如对{“field”:7},在JSON的存储上7只使用了一个字节,而如果用BSON,那就是至少4个字节(32位)
  ②数据分片,将整体数据分摊在多个存储设备上,这样每个存储设备的数据量相对就会小很多,以此满足系统的性能需求

  ③无模式:各种形式的NoSQL数据库有个共同点,那就是它们都没有模式。若要在关系型数据库中存储数据,
  首先必须定义“模式”,也就是用一种预定义结构向数据库说明:要有哪些表格,表中有哪些列,
  每一列都存放何种类型的数据。必须先定义好模式,然后才能存放数据。

4.mongodb的缺点

1/占用空间非常大
2/不支持事务
3/目前已经不维护32位的系统的了
注:事务,一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。

5.一个mongodb中可以建立多个数据库。
6.MongoDB的默认数据库为"db",该数据库存储在data目录中。
7.MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。
8.数据库命名:通过标识符,一般是utf-8字符串,不能为空,不能用local/admin/config这三个

9.mongo的基础指令
show dbs 获取你当前所有的数据库
use dataBase_name 创建数据库(没有-创建/存在-使用)
db 指查询你当前的数据库
db.stats() 查询你当前数据库的状态
db.dropDatabase() 删除你当前的数据库
db.help() 查询帮助
db.version() 获取你当前数据库的版本
db.database_name.help() 查询任意数据库的帮助
db.collection_name.find() 查询你当前集合内的信息
insert插入 db.album.insertOne({‘title’:’xxxx’}),
查看采用db.album.find();
插入多条数据insertMany([{},{},{}])/insert

10.MongoDB-文档
文档是一个键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。
一个简单的文档例子如下:
{"genres": ["犯罪","剧情" ],"title": "肖申克的救赎"}

11.MongoDB-集合
集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。
集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。
注:集合的命名不能是空字符串,也不能出现-,0等,不能以system,$开头

12.Collection聚集集合操作
创建一个聚集集合
db.createCollection("collName", {size: 20, capped: true, max: 100});
db.collName.isCapped(); //判断集合是否为定容量
得到指定名称的聚集集合
db.getCollection("account");
得到当前db的所有聚集集合
db.getCollectionNames();
显示当前db所有聚集的状态
db.printCollectionStats();
删除集合
db.collectionname.drop();

添加
db.users.save({name: ‘zhangsan', age: 25, sex: true});
修改
所有数据都添加一个artist
db.albums.updateMany({},{$set:{artist:‘哈哈’}})
db.users.update({age: 25}, {$set: {name: 'changeName'}}, false, true);
相当于:update users set name = ‘changeName' where age = 25;
1/修改的数据不存在---第一个参数false(不添加)true(添加)
2/数据有重复的---第二个参数true符合条件的数据均修改,false默认修改第一条数据
db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true);
相当于:update users set age = age + 50 where name = ‘Lisi';
db.users.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true);
相当于:update users set age = age + 50, name = ‘hoho' where name = ‘Lisi';
删除
db.users.remove({age: 132});

查询所有记录
db.userInfo.find();
相当于:select* from userInfo;
查询去重后数据
db.userInfo.distinct("name");
相当于:select distict name from userInfo;
查询age = 22的记录
db.userInfo.find({"age": 22});
相当于: select * from userInfo where age = 22;
查询age > 22的记录
db.userInfo.find({age: {$gt: 22}});
相当于:select * from userInfo where age >22;
查询age < 22的记录
db.userInfo.find({age: {$lt: 22}});
相当于:select * from userInfo where age <22;
查询age >= 25的记录
db.userInfo.find({age: {$gte: 25}});
相当于:select * from userInfo where age >= 25;
查询age <= 25的记录
db.userInfo.find({age: {$lte: 25}});
查询age >= 23 并且 age <= 26
db.userInfo.find({age: {$gte: 23, $lte: 26}});
查询name中包含 mongo的数据
db.userInfo.find({name: /mongo/});
//相当于%%
select * from userInfo where name like ‘%mongo%’;
查询name中以mongo开头的
db.userInfo.find({name: /^mongo/});
select * from userInfo where name like ‘mongo%’;
查询指定列name、age数据
db.userInfo.find({}, {name: 1, age: 1});
相当于:select name, age from userInfo;
查询指定列name、age数据, age > 25
db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});
相当于:select name, age from userInfo where age >25;
按照年龄排序
升序:db.userInfo.find().sort({age: 1});
降序:db.userInfo.find().sort({age: -1});
查询name = zhangsan, age = 22的数据
db.userInfo.find({name: 'zhangsan', age: 22});
相当于:select * from userInfo where name = ‘zhangsan' and age = ’22';
查询前5条数据
db.userInfo.find().limit(5);
相当于:select top 5 * from userInfo;
查询10条以后的数据
db.userInfo.find().skip(10);
相当于:select * from userInfo where id not in (
select top 10 * from userInfo
);
限制数据量/几条数据后
db.userInfo.find().limit(10).skip(5);
or与 查询
db.userInfo.find({$or: [{age: 22}, {age: 25}]});
相当于:select * from userInfo where age = 22 or age = 25;
查询第一条数据
db.userInfo.findOne();
相当于:selecttop 1 * from userInfo;
db.userInfo.find().limit(1);
查询某个结果集的记录条数
db.userInfo.find({age: {$gte: 25}}).count();
相当于:select count(*) from userInfo where age >= 20;
查询某一项的记录数目
db.userInfo.find({sex: {$exists: true}}).count();
相当于:select count(sex) from userInfo;

13. 连接MongoDB(两种方法,我们常用第二种方法)

第一步:新建一个文件夹,然后在node中运行npm init,npm i mongodb@2 -D,安装好之后,文件夹下会出来package.json文件,然后会出来node_modules文件夹,注意!!!!在这里一定要在mongodb后面加上版本号@2,这样就会自动安装第二版的最新更新,不然会安装失败。

第二步:在package.json文件下添加"dev": "node index",然后新建一个index.js文件,在index.js中写入代码

方法一:

var mongodb=require('mongodb');//引用mongodb模块
var server=new mongodb.Server('localhost',27017,{auto_reconnect:true});//端口号
var db=new mongodb.Db('zz1906',server,{safe:true}); db.open((err,dbs)=>{
// dbs==zz1906
if(err) throw err;
dbs.collection('info',(err,coll)=>{
// coll==info
if(err) throw err; // console.log(coll.find())
coll.find().toArray((err,data)=>{
if(err) throw err;
console.log(data)
dbs.close()
})
})
})

方法二:

var mongodb=require('mongodb').MongoClient;
var db_str="mongodb://localhost:27017/zz1906";
mongodb.connect(db_str,(err,dbs)=>{
//dbs==zz1906
if(err) throw err;
dbs.collection('info',(err,coll)=>{
//coll==info // if(err) throw err;//打印出来会有很多代码冗余
// console.log(coll.find())
// dbs.close() if(err) throw err;
coll.find().toArray((err,data)=>{//查(减少了很多冗余代码)
if(err) throw err;
console.log(data);
dbs.close()
})
coll.insert({title:'战狼'},()=>{//增
console.log('success');
dbs.close();
})
coll.remove({title:'吴京'},()=>{//删
console.log('success');
dbs.close(); })
coll.update({name:"zhangsan"},{$set:{name:'张三'}},()=>{//改
console.log('success');
dbs.close(); }) })
})

14. 连接mongooes

安装mongooes,在node中输入npm i mongoose --save-dev, index.js中输入代码

var mongoose=require('mongoose');
var db_str="mongodb://localhost:27017/zz1906";
mongoose.connect(db_str)
mongoose.connection.on('connected',()=>{
console.log('连接成功')
})
mongoose.connection.on('error',()=>{
console.log('error')
})
mongoose.connection.on('disconnected',()=>{
console.log('断开连接')
}) var schema=new mongoose.Schema({
name:{type:String,require:true},
content:{type:String,require:true}
}) var Cat=new mongoose.model('info',schema)
// Cat.find({},(err,data)=>{//查询
// if(err) throw err;
// console.log(data)
// mongoose.disconnect()
// })
// Cat.create({name:'小明',content:'helloworld'},()=>{//增
// console.log('success')
// mongoose.disconnect()
// })
// Cat.update({name:'小明'},{$set:{content:'hi'}},()=>{//改
// console.log('success')
// mongoose.disconnect()
// })
// Cat.remove({name:'小明'},()=>{//删
// console.log('success');
// mongoose.disconnect()
// })

15. 也可以运用软件robo3t来对数据库进行操作

NodeJS连接MongoDB和mongoose的更多相关文章

  1. NodeJS连接MongoDB数据库

    NodeJS连接MongoDB数据库 连接数据库的js文件[我将其命名为(connect.js)] // 引入mongoose第三方模块 const mongoose = require('mongo ...

  2. nodejs连接mongodb的方法

    一. var express = require('express'); var mongodb = require('mongodb'); var app = express(); app.use( ...

  3. NodeJS连接MongoDB数据库时报错

    今天第一次尝试连接MongoDB数据库,具体步骤也很简单. 首先,通过NodeJS运行环境安装MongoDB包,进入要安装的目录,执行语句 npm install mongodb 安装成功后,通过如下 ...

  4. nodejs连接mongodb

    一.安装 a.访问mongodb官网下载https://www.mongodb.com/,有zip或者msi版本,zip解压缩就可以用,msi需要安装后使用 b.安装,指定好安装路径,一路下一步 c. ...

  5. nodejs连接mongodb(密码)

    const MongoClient = require('mongodb').MongoClient; const url = 'mongodb://user:password@localhost:2 ...

  6. Mongoose使用——nodejs结合mongodb

    0. 前言: Mongoose是NodeJS的驱动,不能作为其他语言的驱动.Mongoose有两个特点: 通过关系型数据库的思想来设计非关系型数据库 基于mongodb驱动,简化操作 Mongooos ...

  7. Nodejs开发(2.连接MongoDB)

    一.先配置MongoDB Win10下下载那个安装版,zip版的会报却各种DLL,安装在你希望的路径,实在安装错了,就剪切过来也行(本例E:\mongodb). 然后是配置启动脚本,就是写一个bat文 ...

  8. nodejs和mongodb实践

    首先,当然是都安装了nodejs 和mongodb了.这必须是前提条件. 现在我们要用nodejs连接mongodb数据库了.我这里只是一个非常非常简单是实践,初学嘛.更深入的学习之后,我会仔细写笔记 ...

  9. 【Node.js】二、基于Express框架 + 连接MongoDB + 写后端接口

    在上节,我们讲了如何搭建express环境,现在我们说说如何通过node.js写服务接口给前端调用 1. 首先通过MongoDB建好数据库与表格 例如,我的数据库名字为db_demo,数据库表格为go ...

随机推荐

  1. nodejs安装 及环境变量配置教程 超详细版

    ------------恢复内容开始------------ ------------恢复内容开始------------ 上篇文件 写到  遇到了两个棘手问题  : @终端进程启动失败: shell ...

  2. MR 01 - MapReduce 计算框架入门

    目录 1 - 什么是 MapReduce 2 - MapReduce 的设计思想 2.1 如何海量数据:分而治之 2.2 方便开发使用:隐藏系统层细节 2.3 构建抽象模型:Map 和 Reduce ...

  3. NOIP模拟72

    T1 出了个大阴间题 解题思路 看了看数据,大概是个状压 DP,但是感觉记忆化搜索比较好写一点(然而并不是这样递归比迭代常熟大了许多..) 不难判断出来 b 的数值与合并的顺序无关于是我们可以预先处理 ...

  4. Electron+Vue+ElementUI开发环境搭建

    Node环境搭建 本文假定你完成了nodejs的环境基础搭建: 镜像配置(暂时只配置node包镜像源,部分包的二进制镜像源后续讨论).全局以及缓存路径配置,全局路径加入到了环境变量 $ node -v ...

  5. 编程模仿MySql客服端

    写在前面 通过自己编写的Java代码程序,去模仿实现MySql客服端的简单功能,最终以控制台操作,很像在Dos窗口通过命令操作MySql数据库. 关键问题 在编写过程中遇到的一些小问题和一些值得留心注 ...

  6. MS office设置夜间模式

    点击文件 帐户 -> office主题

  7. 3.2 Dependencies of the Projects in the Solution 解决方案中项目间的依赖项

    3.2 Dependencies of the Projects in the Solution 解决方案中项目间的依赖项 The diagram below shows the essential ...

  8. 打造专属测试平台4-使用Docker部署Django项目

    编写完项目代码后,为了稳定的运行,需要将其部署至服务器.这里我选择了Docker去部署Django后端代码. 首先来看看Runoob对Docker的介绍: Docker 是一个开源的应用容器引擎,基于 ...

  9. 【UE4】 补丁Patch 与 DLC

    概述 UE4 中主要使用 Project Launcher 来进行补丁和DLC的制作 补丁与 DLC 都需要基于某个版本而制作 补丁 与 DLC 最后以 Pak 形式表现, 补丁的 pak 可以重命名 ...

  10. Beta阶段第七次会议

    Beta阶段第七次会议 时间:2020.5.23 完成工作 姓名 工作 难度 完成度 ltx 1.修改小程序页面无法加载bug2.修改条件语句,使得页面能够正常显示 中 90% xyq 1.根据api ...