mongoose(猫鼬)
[email protected] 快速入门
const mongoose = require('mongoose'); /* 连接数据库 */ mongoose.connect('mongodb://localhost/mytest', {useNewUrlParser: true}); // 如果没有mytest这个数据库,则会自行创建 let db = mongoose.connection; // 如果连接发生错误 db.on('error', ()=>{console.error('连接错误')}); // 如果连接成功 db.once('open', ()=>{console.log('已经连接')}); /* 注册一个集合kittens */ let kittySchema = new mongoose.Schema({ name: String, age: Number }); // 添加方法,被编译到Model原型并在每个文档实例上公开 kittySchema.methods.talk = function(){ let greeting = this.name || '我还没有名字'; console.log(`我叫${greeting}`); }; let Kitten = mongoose.model('kittens', kittySchema); /* 创建kittens集合的文档(实例,即一条数据)*/ let silence = new Kitten({ name: 'silence', age: 1 }); // console.log(silence); 会自动加一个 _id 的属性 let fluffy = new Kitten({ name: 'fluffy', age: .5 }); // 存到MongoDB上 silence.save(); fluffy.save((err, result)=>{ if(err)return; fluffy.talk(); });
查询
第一个参数是查询条件,第二个参数指定结果输出的项目(可省略,就是全部输出)。
Kitten.find({name: /^flu/}, {name: 1, _id: 0},(err, result)=>{ if(err)return; console.log(result); })
基础查询
Kitten.findOne()
利用id的唯一性查询
Kitten.findById(_id,callback)
利用正则表达式模糊查询
let findCondition = { name: { $regex: /si/i } }
其他条件
{ age: { $gte: 18 // age >= 18 } }
- $or或关系
- $nor或关系取反
- $gt大于
- $gte大于等于
- $lt小于
- $lte小于等于
- $ne不等于
- $in在多个值范围内
- $nin不在多个值范围内
- $all匹配数组中多个值
- $regex正则,用于模糊查询
- $size匹配数组大小
- $maxDistance范围查询,距离(基于LBS)
- $mod取模运算
- $near邻域查询,查询附近的位置(基于LBS)
- $exists字段是否存在
- $elemMatch匹配内数组内的元素
- $within范围查询( 基于LBS)
- $box范围查询,矩形范围(基于LBS)
- $center范围醒询,圆形范围(基于LBS)
- $centerSphere范围查询,球形范围(基于LBS)
- $slice查询字段集合中的元素(比如从第几个之后,第N到第M个元素)
查询数量
Kitten.count({/* 查询条件 */},(err,num)=>{})
分页查询(important)
let findCondition = {}; // 查询条件 let pageSize = 10; // 每页多少条 let currPage = 5; // 当前是多少页 let skipNum = (currPage-1)*pageSize; // 跳过条数。比如现在是第5页,就跳过前4页乘以每页10条。 let sort = { age: -1 // 按age降序排序 } Kitten.find(findCondition,{_id:0,age:1,name:1}) .skip(skipNum) .limit(pageSize) .sort(sort) .exec((err,result)=>{});
更新
Kitten.update({/*查询条件*/}, {/*更改项目*/}, {}, (err,res)=>{}); // 第三个参数设为`{multi: false}`只更新一个文档。
更改文档某一条(些)数据再调用save方法也可更新。
删除
Kitten.remove({/* 查询条件 */}, callback)
其他常用的增删改查api
- Model.deleteMany()
- Model.deleteOne()
- Model.findById()
- Model.findByIdAndDelete()
- Model.findByIdAndRemove()
- Model.findByIdAndUpdate()
- Model.findOneAndDelete()
- Model.findOneAndRemove()
- Model.findOneAndUpdate()
- Model.replaceOne()
- Model.updateMany()
- Model.updateOne()
解读Schema
mongoose的一切都是从Schema开始的。每个Scheam映射到MongoDB集合,并定义该集合中 documnet 的数据格式类型。
https://mongoosejs.com/docs
相关推荐
80530895 2020-07-05
mkhhxxttxs 2020-06-14
80500495 2020-06-14
86211943 2020-03-01
80530895 2020-02-23
80500495 2020-01-29
86211943 2020-01-24
lovecodeblog 2020-01-24
87261046 2019-12-23
86211943 2019-12-20
lightlanguage 2019-12-16
MYRENZHIBO 2019-08-28
85234656 2018-09-03
fudirong 2012-04-12
80500495 2019-07-01