Mongoose是一个方便在node.js环境下运行mongodb的对象模型工具。安装需要先安装node.js环境和mongodb数据库,然后创建mongdb数据文件夹并启动mongdb(windows安装启动mongodb)。connectconnect用于连接数据库mongoose.connect(uri(s),[options],[callback])//url(s):数据库地址,可以多个,用`,`分隔//options:optional,配置参数//callback:可选,回调//规则mongoose.connect('mongodb://数据库地址(含端口号)/数据库名')//连接mongodb实例mongoose.connect('mongodb://localhost:27017/Db');//使用本地默认端口27017连接mongodb//连接指定用户连接示例mongoose.connect('mongodb://username:password@127.0.0.1:27017/databasename')//多个连接一个数据库示例//如果你想在你的应用中连接多个数据库,你只需要设置多个以分隔的url,并将mongos设置为truemongoose.connect('urlA,urlB,...',{mongos:true})来创建schema&modelsschemaschema可以理解为mongoose对表结构的定义(不仅可以定义文档的结构和属性,还可以定义文档实例方法、静态模型方法、复合索引等),每个schema都会映射到mongodb一个集合,schema不具备操作数据库的能力constmongoose=require('mongoose');const{Schema}=mongoose;//用户对象模型constuserSchema=newSchema({name:{type:String,//typedefault:Date.now//默认值},avatar:{type:String,required:true//必须有值},user:String,passworld:String,hash:String,score:Number,learn:Array,message:Array,star:Array,符号:Ar射线,signdate:字符串,isregister:布尔值,});schema字段类型StringNumberDateBufferBooleanMixedObjectIdArrayModelModel是一个从Schema编译而来的奇特构造函数,每个具有抽象属性和行为的Model实例都是一个文档。文档可以保存到数据库中,并对数据库进行操作。//创建并导出模型constdb={User:mongoose.model('MUser',muserSchema),};module.exports=db;现在我们已经完成了mongodb的数据连接和数据对象模型的创建。操作mongodb数据库导入之前导出的modelmongodb数据constdb=require('../models/db')mongodb查询1.findfind用于查询并输出条件为db.Userl.find({conditions},{options},callback)conditionsObjecttype//查询条件optionsObjecttype//查询配置参数callbackFunction//回调查询操作示例//查询Article模型下的所有数据db.Article.find({},function(err,docs){if(err){console.log('Error'+err);return;}res.json(docs);//json格式输出});//查询下的state字段Article模型为'publish'内容,不输出articleContent和user字段的内容。笔记!(1表示只输出字段,0表示不输出字段)db.Article.find({state:"publish"},{articleContent:0,user:0},function(err,docs){if(err){console.log('Error'+err);return;}res.json(docs);});//查询阅读量大于500但小于600的文章db.Article.find(({views:{$gte:500,$lte:600}}),function(err,docs){if(err){console.log('Error'+err);返回;}res.json({data:docs});})//复杂条件查询//$ro查询模型下的title字段或tag字段,$regex为正则匹配实现模糊查询,$options不区分大小写db.Article.find({$or:[{title:{$regex:searchval,$options:'i'}},{tag:{$regex:searchval,$options:'i'}}]}},function(err,docs){if(err){控制台.log('Error'+err);return;}res.json({data:docs});})条件查询$or--------------orrelation$nor-------------或关系取反$gt--------------大于$gte--------------大于或等于$lt--------------小于$lte--------------小于或等于$ne----------------不等于$in--------------在多个取值范围$nin-------------Notinmultiple$allwithinthevaluerange--------------匹配数组中的多个值$regex----------正则,用于模糊查询$size--------------匹配数组大小$maxDistance--范围查询,距离(基于LBS)$mod----------取模运算$near----------邻居查询,查询附近位置(基于LBS)$exists----------字段是否存在$elemMatch---匹配数组中的元素$within----------范围查询(基于LBS)$box-----------范围查询,矩形范围(基于LBS)$center----------范围查询,圆形范围(基于LBS)$centerSphere-范围查询,球形范围(基于LBS)$slice-------------查询字段集合中的元素(例如从第N个到第M个元素的数字2)。findOne与find类似,但只返回单个文档db.Article。findOne({title:req.body.title},function(err,docs){if(err){console.log('Error'+err);}res.json(docs);})3.findById类似到findOne,但它接收文档的_id作为参数并返回单个文档。_id可以是字符串或ObjectId对象。db.Article.findOne(id,function(err,docs){if(err){console.log('Error'+err);}res.json(docs);})4.count返回文档的数量符合标准。db.Article.count(id,function(err,docs){if(err){console.log('Error'+err);}res.json(docs);})5.where当查询比较复杂时,使用where:db.Article.where('age').gte(25).where('tags').in(['movie','music','art']).select('name','age','tags').skip(20).limit(10).asc('age').slaveOk().hint({age:1,name:1}).run(function(err,docs){if(err){console.log('Error'+err);}res.json(docs);}));$where有时我们需要在mongodb中使用javascript表达式进行查询,这时可以使用find({$where:javascript})方法,$where是一个快捷方式,支持链式调用查询。db.MUser.$where('this.firstname===this.lastname').exec((err,docs)=>{res.json({docs});});sort&skip&limitsort就是排序method,对该字段内容正序或倒序输出(-1为倒序)skip是跳过多少条limit是限制输出多少条//实现文章分页,按时间倒序输出db.Article.find({tag:req.params.labe},function(err,docs){if(err)return;res.json(docs)}).sort({date:-1}).skip(page*pagenum.limit(pagenum)mongodbincreasesave是一个实例方法,需要用newModel()实例化//保存一个用户信息,userobj是你创建的文档对象模型中的字段,需要正确传入constuserobj={email:query,passworld:req.body.passworld,hash:hash,isregister:false,score:5,sign:[],signdate:''}newdb.MUser(userobj).save(函数(error){if(error){res.status(500).send()return}res.json({statu:200})})mongodbdeleteremove删除数据方法db.Course.remove({_id:req.body.id},function(err,docs){if(err){res.status(500).send();return}res.json({statu:200})})mongodbgupdateupdateupdatedatamethod//将指定email字段dataentry下的字段更新为content内容,不存在则创建字段db.Share.update({email:email},{$set:{content:newarr}},function(err,docs){if(err){res.status(500).send();return}res.json({statu:200});})//$set指定字段的值。如果此字段不存在,则会创建它。它可以是MondoDB支持的任何类型。Article.update({_id:id},{$set:{views:51,title:'修改标题'...}})//$unset同上,删除一个字段Article.update({views:50},{$unset:{views:'remove'}})//执行后:views字段不存在//$inc增减修饰符,只对数字有效。Article.update({_id:id},{$inc:{views:1}})//$push为字段内容推送数据为数组Article.update({_id:id},{$push:{message:messageobj}})//$pop从头或尾删除单个元素(1从后面删除,-1从前面删除)db.Article.update(({_id:id),{$pop:{relationships:-1})//__$pull__删除符合条件的元素,不只是一个db.Article.update(({_id:id),{$pull:{"relationships":{"fname":"dongren","lname":"zeng"}}})$set指定字段的值,如果字段不存在,则创建。可以是MondoDB支持的任何类型。Article.update({_id:id},{$set:{views:51,title:'modifiedtitle'...}})$unset同上,删除一个字段Article.update({views:50},{$unset:{views:'remove'}})//执行后:views字段不存在$inc增减修饰符,只对数字有效。Article.update({_id:id},{$inc:{views:1}})$push为字段为数组的内容推送数据Article.update({_id:id},{$push:{message:messageobj}})$pop从头或尾删除单个元素(1表示从后面删除,-1表示从前面删除)db.Article.update(({_id:id),{$pop:{relationships:-1})$pull删除符合条件的元素,不只删除一个db.Article.update(({_id:id),{$pull:{“relationships”:{“fname”:”dongren”,”lname”:“曾”}}})
