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

mongoose(猫鼬)

时间:2023-04-03 19:53:03 Node.js

mongoose@5.2.13快速入门constmongoose=require('mongoose');/*连接数据库*/mongoose.connect('mongodb://localhost/mytest',{useNewUrlParser:true});//如果没有mytest数据库,会自己创建letdb=mongoose.connection;//如果连接出错db.on('error',()=>{console.error('connectionerror')});//如果连接成功db.once('open',()=>{console.log('connected')});/*注册一个collectionkittens*/letkittySchema=newmongoose.Schema({姓名:字符串,年龄:数字});//添加方法,编译为模型原型并在每个文档实例上公开kittySchema.methods.talk=function(){letgreeting=this.name||'我还没有名字';console.log(`Mynameis${greeting}`);};letKitten=mongoose.model('kittens',kittySchema);/*创建小猫集合的文档(实例,一条数据)*/letsilence=newKitten({name:'silence',age:1});//console.log(silence);会自动添加一个_id的属性letfluffy=newKitten({name:'fluffy',age:.5});//保存到MongoDBsilence.save();fluffy.save((err,result)=>{如果(错误)返回;fluffy.talk();});查询的第一个参数为查询条件,第二个参数指定结果输出的项(可以省略,即全部输出)。Kitten.find({name:/^flu/},{name:1,_id:0},(err,result)=>{if(err)return;console.log(result);})基本查询小猫。findOne()利用id的唯一性来查询Kitten.findById(_id,callback)利用正则表达式进行模糊查询letfindCondition={name:{$regex:/si/i}}otherconditions{age:{$gte:18//age>=18}}$oror关系$noror关系取反$gt大于$gte大于等于$lt小于$lte小于等于$ne不等于$ininmultiplevalueranges$nin不在多个取值范围内$all匹配数组中的多个值$regex正则,用于模糊查询$size匹配数组大小$maxDistance范围查询,距离(基于LBS)$mod模运算$nearneighborhoodquery,查询附近位置(基于LBS)$exists字段是否存在$elemMatch匹配数组中的元素$within范围查询(基于LBS)$box范围查询,矩形范围(基于LBS)$center范围查询,circularrange(basedonLBS)$centerSphererangequery,Sphericalrange(basedonLBS) $slice查询字段集合中的元素个数(比如从数字后第N个到第M个元素)Kitten。count({/*querycondition*/},(err,num)=>{})分页查询(重要)letfindCondition={};//查询条件letpageSize=10;//每页有多少项目letcurrPage=5;//当前有多少页letskipNum=(currPage-1)*pageSize;//跳过项目数。比如现在是第5页,跳过前4页,每页乘以10项。letsort={age:-1//按年龄降序排序}Kitten.find(findCondition,{_id:0,age:1,name:1}).skip(skipNum).limit(pageSize).sort(sort).exec((err,result)=>{});UpdateKitten.update({/*查询条件*/},{/*更改项*/},{},(err,res)=>{});//第三个参数设置为`{multi:false}`以仅更新一个文档。也可以通过更改文档中的某(一些)数据,然后调用save方法来更新。删除Kitten.remove({/*查询条件*/},回调)其他常用的增删改查apiModel.deleteMany()Model.deleteOne()Model.findById()Model.findByIdAndDelete()Model.findByIdAndRemove()Model.findByIdAndUpdate()Model.findOneAndDelete()Model.findOneAndRemove()Model.findOneAndUpdate()Model.replaceOne()Model.updateMany()Model.updateOne()解读Schemamongoose一切从Schema开始。每个Scheam映射到一个MongoDB集合,并为该集合中的documnet定义数据格式类型。https://mongoosejs.com/docs