当前位置: 首页 > 后端技术 > Node.js

Vue2.0开发聊天程序(六)获取mongodb

时间:2023-04-03 12:06:54 Node.js

我的琴声在呜咽,我的眼泪都流了。我回到了遥远的草原。                   -海子《九月》mongodb安装什么是Mongodb?是一个基于分布式文件存储的数据库,不多说了。mongodb分为多个版本,Atlas【云版】、CommunityServer【社区版】、EnterpriseServer【企业版】……我选择了社区版安装,Windows7/WindowsServer2008R2。v3.4.0版本下载地址:https://www.mongodb.com/downl...注:可以在右上角的红框中选择自己想要的版本,分别是稳定版、早期版、开发版板,左上角可以选择对应版本集中的指定版本可以选择zip/tgz/msi三种资源格式。下载zip和tgz后,解压到相应目录,并配置相应的环境变量。msi是安装文件,不需要配置环境变量。【我用的是msi,方便】运行安装后,在mongodb目录下新建文件夹testMongodb,打开cmd,输入mongod--dbpath"D:\mongodb\testMongodb",访问http://localhost:27017/在浏览器中,显示如下,说明你不仅成功安装了Mongodb,还打开了一个名为testMongodb的数据库。总的来说,与mySql相比,SOLserver使用mongodb创建数据库和启动服务要容易得多。就好比新建一个文件夹,文件夹里面存了很多txt文件。您可以随时添加或删除文件而无需重新启动服务。可视化界面工具RobonmongoRobonmongo是一个免费的轻量级mongodb用户图形界面(GUI)。官网下载地址:https://robomongo.org/右上角下载,会有多个版本。每个版本都有详细的版本说明,您可以选择您认为合适的版本或者直接使用最新版本。下载安装后,在开启mongodb服务的情况下,输入mongodb服务器地址连接服务器。你可以对数据进行任何你想要的操作,而且操作非常简单,这里就略过了。Node连接mongodb,使用以下npm包运行mongodb:mongoose、mongodb、mongoskin、mongojs(作者没有找到其他npm包,但不代表没有)。哪一个更好?个人意见仅供参考:1.mongodb:正式版,但是写起来太麻烦。2.mongoskin:简单,但是相关文档太少,连联表查询的实现都找不到3.mongojs:比mongodb好,但是文档太少让人很不满意MongoDBORM有很多documents(官网),支持联表查询,很规范,所以选择mongoose。http://mongoosejs.com/mongoose简单搭建本节只讲mongoose的基本概念和最基本的项目搭建。CRUD的操作(即增删改查)放在下一节。简单开始安装mongoose,安装就可以了$npminstallmongoose--save假设我们已经为testMongodb开通了一个mongodb服务,创建一个连接://引入mongoose模块mongoose.connect('mongodb://localhost/testMongodb');//连接数据库服务vardb=mongoose.connection;//connection创建连接实例db.on('error',console.error.bind(console,'连接错误:'));//注册连接失败的事件监听器db.once('open',function(callback){//连接注册成功的事件监听器只触发一次//耶!});once方法继承自EventEmitter,EventEmitter是节点事件触发和事件监听函数的封装。此时testMongodb还是一个没有任何表的空数据库(为了便于理解,集合被解释为表)。要了解mongoose,要了解mongoose,首先要了解以下三个名词:Schema:以文件形式存储的数据库模型骨架,不具备操作数据库的能力Model:Schema发布生成的模型,具有抽象属性数据库操作和行为对于实体:模型创建的实体,它的操作也会影响数据库。一句话:用Schema创建一个数据库表骨架,通过这个表骨架生成一个可操作的Model。这个Model可以创建对应的实体Entity,而Entity是一段可操作的数据,为了便于理解,都是Object。Schema可以看做是设计图,Model是根据设计图做出来的模具,Entity是模具做出来的对象。Schema定义了一个SchemavarPersonSchema=newmongoose.Schema({name:String//定义一个属性名,类型为String});Schema.TypeSchema.Type是Mongoose默认的一些数据类型,基本数据类型就在其中.还内置了一些Mongoose特定的Schema.Types。支持自定义schema.type。Schema.type有以下几种常见类型://Example:varExampleSchema=newSchema({name:String,binary:Buffer,//以字节为单位操作文件living:Boolean,updated:Date,age:Number,mixed:Schema.Types.Mixed,//这个混合类型相当于嵌套_id:Schema.Types.ObjectId,//主键_fk:Schema.Types.ObjectId,//外键数组:[],arrOfString:[String],//数据类型只能是String数组,同arrOfNumber:[Number],arrOfDate:[Date],arrOfBuffer:[Buffer],arrOfBoolean:[Boolean],arrOfMixed:[Schema.Types.Mixed],arrOfObjectId:[Schema.Types.ObjectId],nested:{stuff:String,//具有特定属性的对象},populate:{type:String,ref:'users'用于支持populate查询(联表查询)}});Schema.Types.Mixed用户定义的可重用数据格式,如果没有定义,默认为{}。Schema.Types.Mixed={name:String}varAnySchema=newSchema({any:Schema.Types.Mixed});//等于varAnySchema=newSchema({any:{name:String}});ObjectId是每个Schema默认配置的主键属性,属性名是_id,你可以定义一个_id来覆盖这个属性。Schema扩展Schema扩展支持添加公共实例方法和静态方法,方便Model和Entity的增删改查等操作。实例方法只能在对应的实例(Entity层)生成后才能调用,而静态方法可以在模型层使用。实例方法varPersonSchema=newSchema({name:String,type:String});//查询相似数据PersonSchema.methods.findSimilarTypes=function(cb){returnthis.model('Person').find({type:this.type},cb);}使用varPersonModel=mongoose.model('Person',PersonSchema);varkrouky=newPersonModel({name:'krouky',type:'前端工程师'});krouky.findSimilarTypes(function(err,persons){//你可以在persons中找到其他前端工程师});静态方法:PersonSchema.statics.findByName=function(name,cb){this.find({name:newRegExp(name,'i'),cb});}varPersonModel=mongoose.model('Person',PersonSchema);PersonModel.findByName('krouky',function(err,persons){//查找所有名字为krouky的人});Schema配置项在newSchema();时,可以添加一个配置项来配置Schema。varconfig={name:String,sex:String}varoptions={safe:true,//默认安全属性为truestrict:true,//严格配置(默认启用),保存到数据库时,自动验证capped:1024,//在线设置,限制一次操作的数量versionKey:'__v'//版本锁是Mongoose的默认配置autoIndex:'',//autoindex}varExampleSchema=newSchema(config,options);Model模型由Schema构建。除了Schema定义的数据库骨架外,它还有一个数据库行为模型,相当于管理数据库属性和行为的类//CreateSchemavarTankSchemafirst=newSchema({name:'String',size:'细绳'});//通过Schema创建ModelvarTankModel=mongoose.model('Tank',TankSchema);有了相应的模型,就可以直接用于操作数据库vartank={'something',size:'small'};TankModel.create(坦克);EntityEntity是模型的一个实例,根据模型创建的Entity并没有存储在数据库中,需要调用Entity的save方法进行存储。Entity没有Model的方法,只能使用自己的方法。需要注意的是,在新版本的mongoose文档中,Entity是Documents。//通过Model创建EntityvartankEntity=newTankModel('someother','size:big');tankEntity.save();限于篇幅,这一段暂时写到这里。下一节会详细讲解query、Validation、Middleware等更高级的操作。参考文章:http://mongoosejs.com/docs/ap...http://www.runoob.com/mongodb...http://ourjs.com/detail/53ad2...https://cnodejs.org/topic/548...https://www.cnblogs.com/jaxu/...