mongoosemongoose网站介绍:https://mongoosejs.com/为什么要使用MongooseMongoose是一个模块,可以让我们通过Node来操作MongoDB。Mongoose本质上是一个对象文档模型(ObjectDocumentModel,ODM)库,优化了Node原生的MongoDB模块,提供了更多的功能。Mongoose的优点可以像操作对象一样操作数据库可以为文档创建模式结构(Schema)可以验证模型中的文档/文档可以按类型将数据转换为对象模型可以使用中间件来应用业务逻辑Hook比Nodenative的MongoDB驱动比较好用Mongoose下载安装mongoose模块cnpminstallmongoose--savereferencemongoose:varmongoose=require("mongoose");使用“猫鼬”连接到数据库:vardb=mongoose.connect("mongodb://user:pass@localhost:port/database");执行以下代码查看默认数据库测试,是否可以连接成功?varmongoose=require("mongoose");vardb=mongoose.connect("mongodb://localhost/m_data");db.connection.on("error",function(error){console.log("数据库连接failed:"+error);});db.connection.on("open",function(){console.log("数据库连接成功!");});db.connection.once('close',()=>{console.log('Theconnectionhasbeendisconnectedsuccessfully!')})Mongoose基本上使用了几个mongoose的新对象在MongoDB中,多个Document可以组成一个Collection(以下简称集合),多个集合可以组成一个数据库。如果我们要对MongoDB数据进行操作,首先要有上述包含数据的“文件”。一个文件是什么意思?请看下面的介绍。文档——是MongoDB的核心概念,是一组有序的键值对,文档在JavaScript中被表示为对象。同时,它也是MongoDB中数据的基本单位,与关系数据库管理系统中的行非常相似,但表现力更强。集合-由一组文档组成。如果将MongoDB中的文档比作关系数据库中的行,那么集合就相当于表。Schema——以文件形式存储的数据库模型骨架,不能直接连接到数据库端,也就是说它不具备操作数据库的能力,只是定义了数据的类型,可以说是一个数据属性模型(传统意义上的表结构),或者说是一个“集合”的模型骨架。猫鼬中的一切都以模式开始。每个Schema对应MongoDB中的一个集合。架构定义集合中文档的样式。DefineaSchema(table/schemaobject)//新建一个Schema定义规则/字段ruleletSchema=mongoose.Schema;//定义personSchema的字段(rule)需要new,看起来有点像构造函数letpersonSchema=newSchema({姓名:字符串,性别:字符串,年龄:数字});基本属性类型有:StringNumberDateBooleanBufferObjectIdMixedArrayModel——Schema构建生成的模型。根据Schema定义的数据类型规则,可以对符合规则的具体数据进行操作。创建模型(集合)letpersonModel=mongoose.model('person',personSchema);person:数据库中集合的名字,当我们往里面添加数据的时候,如果这个人已经存在,就会保存到它的目录下,如果不存在,就会创建person集合,然后再往里面添加数据得救。//4。插入文档personModel.create({name:'张宁乐',sex:'男',age:18},(err)=>{if(!err){console.log('插入成功!')}else{抛出错误;}});mongoose插入和查询mongoose查找数据的一些方法:https://mongoosejs.com/docs/a...插入多条数据personModel.create([{name:'张豆搞笑',age:2,sex:'男'},{name:'牛溪河',age:2,sex:'女'}],(err)=>{if(!err){console.log('插入成功!')}else{throwerr;}})queryModel.find()personModel.find({name:'张宁乐'},(err,data)=>{if(!err){console.log(data)}else{throwerr;}})查询所有Model.find({},callback)personModel.find({},(err,data)=>{if(!err){console.log(data)}else{throwerr;}})也可以选择查找数据的条件(默认0隐藏1显示id)和MongoDB命令行一样。//只显示名字personModel.find({},{name:1,_id:0},(err,data)=>{if(!err){console.log(data)}else{throwerr;}})在find()中跳过(查询开始的地方)和限制(增加的项目数)也可以使用personModel.find({},{name:1,_id:0,age:1},{skip:0,limit:2},(err,data)=>{//只显示姓名和年龄从第一项开始每次查询2项if(!err){console.log(data)}else{throwerr;}})MongoDB的find()、findOne()等命令可以在mongoose中使用,具体参考:https://mongoosejs.com/docs/a...mongoose修改删除参考:https://mongoosejs.com/docs/a...修改方法:Model.update()Model.updateMany()Model.updateOne()Model.watch()personModel.update({name:'张宁乐'},{$set:{age:20}},(err,data)=>{if(!err){console.log('修改成功!')console.log(data)}else{throwerr;}})删除方法Model.remove()Model.deleteMany()Model.deleteOne()personModel.remove({name:'牛溪河'},(err)=>{if(!err){console.log('删除成功!')}else{throwerr;}})统计文档个数Model.count()personModel.count({},(err,count)=>{if(!err){console.log('查询成功个数!总计:'+count+'');}else{throwerr;}})EntityEntity——Model创建的实体,使用save方法保存数据,Model和Entity的操作会影响数据库的操作,但Model的可操作性更高比实体使用Model创建Entity,如下例所示:letmongoose=require('mongoose');letdb=mongoose.connection('mongodb://localhost/m_data');db.on('open',()=>{console.log('连接成功!')})letSchema=mongoose.Schema;letpersonSchema=newSchema({name:String,sex:String,age:Number});letpersonModel=mongoose.model('person',personSchema);letpersonEntity=newpersonModel({name:'许玮',sex:'男',age:38})personEntity.save((err,person)=>{if(!err){console.log('保存成功!')console.log(person);}else{console.log('保存失败!')}})参考:https://blog.csdn.net/swimmin。..
