Node.JS连接数据库MongoDB和mongoose的操作是什�

Admin 2022-08-16 群英技术资�

本篇内容介绍了“Node.JS连接数据库MongoDB和mongoose的操作是什么”的有关知识,在实际项目的操作过程或是学习过程中,不少人都会遇到这样的问题,接下来就让小编带大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

 

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


上述内容具有一定的借鉴价值,感兴趣的朋友可以参考,希望能对大家有帮助,想要了解更多"Node.JS连接数据库MongoDB和mongoose的操作是什�"的内容,大家可以关注群英网络的其它相关文章�

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:[email protected]进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容�

猜你喜欢

成为群英会员,开启智能安全云计算之旅

立即注册
专业资深工程师驻�
7X24小时快速响�
一站式无忧技术支�
免费备案服务
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 � 0668-2555555
在线客服
微信公众号
返回顶部
返回顶部 返回顶部