在讲MongoDB的数据插入操作之前,我们先简单了解一下它的数据逻辑结构。MongoDB的逻辑结构是层次结构,主要由文档、集合、数据库三部分组成。文档:由键/值对组成,如{a:1};{s:"abc"}等,它是MongoDB的核心单元,MongoDB的文档相当于关系数据库中的一行记录。集合:多个文档组成一个集合,相当于关系数据库中的一张表。数据库(database):多个集合(collection),逻辑上组织在一起,就是数据库(database)。一个MongoDB实例支持多个数据库(database)。Schema模型文档快速安装安装MongoDB在Ubuntu16.04上安装MongoDB参考MongoDB文档:$sudoapt-keyadv--keyserverhkp://keyserver.ubuntu.com:80--recv0C49F3730359A14518585931BC711F9BA15703C6$echo"deb[arch=amd64,arm64]http://repo.mongodb.org/apt/ubuntuxenial/mongodb-org/3.4multiverse”|sudotee/etc/apt/sources.list.d/mongodb-org-3.4.list$sudoapt-getupdate$sudoapt-getinstall-ymongodb-org在CentOS7上安装MongoDB。参考MongoDB文档:$sudovi/etc/yum.repos.d/mongodb-org-3.4.repo[mongodb-org-3.4]name=MongoDBRepositorybaseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/gpgcheck=1enabled=1gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc$sudoyuminstall-ymongodb-org工具模块Mongoose可以对Mongodb安装和建模操作参考安装npminstallmongoose参考mongoosevarmongoose=require("mongoose");使用mongoose链接数据库vardb=mongoose("mongodb://user:pass@localhost:port/database");例子varmongoose=require("mongoose");vardb=mongoose.connect("mongodb://127.0.0.1:27017/test");db.connection.on("error",function(error){console.log("数据库连接失败:"+error);});db.connection.on("open",function(){console.log("——数据库连接成功!——");});schema-模式定义在schema中,我们定义字段,我们可以定义字段的类型varmongoose=require('mongoose')varMovieSchema=newmongoose.Schema({doctor.String,title:String,language:String,country:String,year:Number,summary:String})Model-调用mongoose时编译模型.modelSchema是要编译的模型,然后生成构造函数varmongoose=require('mongoose')varMovieSchema=require('../shemas/movie')varMovie=mongoose.model('movie','MovieSchema')module.export=MovieDocuments-文档实例化有了数据模型之后,要实例化一个文档,只需要调用这个模型,也就是这个构造函数,然后传入一段数据。然后调用save方法即可保存这条数据将它存储在数据库中varMovie=require('./models/movie')varmovie=newMovie(){title:'RoboCop',doctor:'JosePatilla',year:2018}movie.save(function(err){if(err)returnhandleError(err)})数据库查询数据库查询分为批量查询、单一条件查询或特定条件查询数据库批量查询:只需要调用模型的find方法varMovie=require('./models/movie')app.get('/',function(req,res){Movie.find({}).exec(function(err,movies){res.render('index',{title:'jx_moviehomepage',movies:movies})})})数据库单一查询varMovie=require('./models/movie')app.get('/',function(req,res){Movie.findOne({_id:id}).exec(function(err,movies){res.render('index',{title:'jx_moviehomepage',movies:movies})})})数据库单删除varMovie=require('./models/movie')app.get('/',function(req,res){Movie.remove({_id:id},function(err,movie){if(err){console.log(err)}})})MongoDB基本模式:a以文件形式存储的数据库模型骨架,不具备操作数据库的能力Model:Schema发布生成的模型,具有抽象属性和行为的数据库操作databaseDetailedSchema——以文件形式存储的数据库模型骨架,不能直接连接到数据库端,也就是说不具备操作数据库的能力,只是一种表现形式程序片段中的数据库模型,可以说是数据属性模型(传统意义上的表结构),或者说是“集合”的模型骨架varmongoose=require("mongoose")varTestSchema=newmongoose.Schema({name:{type:String},age:{type:Number,default:0},time:{type:Date,default:Date.now},emial:{type:String,default:''}});//基本属性类型包括:string,date,numeric,Boolean,null,array,embeddeddocument等Model——Schema构建生成的模型,除了Schema定义的数据库骨架外,还有行为数据库操作,类似于管理数据库属性和行为的类。vardb=mongoose.connect("mongodb://127.0.0.1:27017/test");//通过Schema创建ModelvarTestModel=db.model("test1",TestSchema);Entity——Model创建的实体,使用save方法保存数据。Model和Entity都可以影响数据库的运行,但Model比Entity更具可操作性。varTestEntity=newTestModel({name:"Lenka",age:36,email:"lenka@qq.com"});console.log(TestEntity.name);//Lenkaconsole.log(TestEntity.age);//36Node.js连接MongoDB实例$cnpminstallmongodb与MySQL不同的是MongoDB会自动创建数据库和集合,所以我们在使用前不需要手动创建。这里插入数据是用https://mlab.com搭建的mongodb数据库,可以看到{item:'buyflowers'}的数据已经写入了,具体实现可以看node+express+中这样写mongodb+ejs小项目todo_appWindows平台安装MongoDBRedis,在egg-mongooseegg-mongooseegg.js中安装操作mogodb的插件。下面以此为例,看看它是如何使用的:真实项目中:app/model/user.jsconfig/config.default.jsconfig/plugin.js参考Mongoose的Mongoose入门教程https://mlab.com/NoSQL/MongoDBmongoose一些操作命令介绍
