NodeJS连接MongoDB和mongoose nodejs mongodb连接池

   2023-02-08 学习力0
核心提示: 1.MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。是世界上目前用的最广泛的nosql数据库2.noSql 翻译过来 not only sql 不仅仅是sql 他就是一个非关系型数据库,它的特点:高性能、易部署、易

 

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来对数据库进行操作

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 打造自己的 nodejs 静态文件服务器(帖子内容,
    用NodeJS打造你的静态文件服务器在《The Node Beginner Book》的中文版(http://nodebeginner.org/index-zh-cn.html)发布之后,获得国内的好评。也有同学觉得这本书略薄,没有包含进阶式的例子。@otakustay同学说:“确实,我的想法是在这之上补一个简单的MV
    02-10
  • NodeJS无所不能:细数10个令人惊讶的NodeJS开源
    在几年的时间里,NodeJS逐渐发展成一个成熟的开发平台,吸引了许多开发者。有许多大型高流量网站都采用NodeJS进行开发,像PayPal,此外,开发人员还可以使用它来开发一些快速移动Web框架。  除了Web应用外,NodeJS也被应用在许多方面,本文盘点了NodeJS在其
    02-10
  • Linux环境下的Nodejs linux安装基本环境
    最近在学习Node.js,在window下总是觉得不那么爽快。最简单而且环保的方法是在虚拟机中安装一个Linux。 { 1.Linux:家中的Linux为Centos。 2.VirtuallyBox: 开启2块网卡。第一个选Host-Only目的是为了让虚拟机通上网。第二块选Bridge Adapter,这是为了
    02-09
  • nodejs package.json说明
    {"name": "test", //项目名称(必须),由小写英文字母、数字和下划线,不能含空格"version": "1.0.0", //项目版本(必须)"description": "This is for study gulp project !", //项目描述(必须)"homepage": "", //项目主页url " key
    02-09
  • 017 nodejs取参四种方法req.body,req.params,re
    摘要: nodejs取参四种方法req.body,req.params,req.param,req.body 获取请求很中的参数是每个web后台处理的必经之路,nodejs提供了四种方法来实现。获取请求很中的参数是每个web后台处理的必经之路,nodejs的 express框架 提供了四种方法来实现。req.bodyre
    02-09
  • Docker windows下安装并搭建Nodejs的webapp
    Docker windows下安装并搭建Nodejs的webapp
    一、关于Docker什么是Docker?Docker 采用go语言编写,是一个开源的应用容器引擎。让开发者可以快速打包他们的应用以及依赖包到一个封装的可移植的容器Image中,然后发布到任何流行的机器( Linux ,windows,Mac等)上,也可以实现虚拟化。容器是使用完全
    02-09
  • Nodejs+Express+Mysql实现简单用户管理增删改查
    Nodejs+Express+Mysql实现简单用户管理增删改查
     源码地址  https://github.com/king-y/NodeJs/tree/master/user目录结构  mysql.jsvar mysql = require('mysql');var pool = mysql.createPool({host : '127.0.0.1',user : 'root',password : '',database : 's79'});exports.que
    02-09
  • nodejs查看本机hosts文件域名对应ip
    const dns = require('dns')dns.lookup('domainName', function(err, result) {console.log(result)}) related:https://***.com/questions/36689536/how-to-resolve-hostname-to-an-ip-address-in-node-js
    02-09
  • nodejs process.memoryUsage() rss等参数啥含义
    nodejs process.memoryUsage() rss等参数啥含义
    1 前言使用process.memoryUsage() ,然后可以得到一个对象如下:{ rss: 4935680,heapTotal: 1826816,heapUsed: 650472,external: 49879}  然而不知道rss是什么缩写,不知道其含义,网上找了一圈,多数都没说到点上,我这边就补充一下,也作为记录使用。2 
    02-09
  • nodejs工程拷贝后运行报module找不到问题
    工程文件夹通过复制黏贴到另外一个地方,运行后报错 “can`t find module 某某某”,查看原因:输入node 进入控制台,输入console.log(module.paths)查看当前nodejs查找module的路径,如果没有工程里的node_modules,通过module.paths.push加入,检查是否有效
    02-09
点击排行