规划的根本目的是为了更快、更有效地达成目标。
上篇文章<深入浅出mongodb(一)>阐述了mongoose的scheme和model基础知识,有了上面的认知,我们开始下面的一系列骚操作,亲爱滴小伙伴们准备好了吗?
Are you Readly?
let mongoose = require("mongoose");
let connection = require("./connection");首先我们需要启动数据库,然后把mongoose库和connection引入,为我们连接数据库做准备。
定义UserScheme的数据结构和类型。
const Scheme = mongoose.Scheme;
let UserScheme = new Scheme({
name:String,
age:Number
},{collection:'user'})let UserModel = connection.model('User',UserScheme);下面我们通过遍历给新建的表添加几条测试数据,方便下面的操作
(async function(){
let users = [];
for(let i =1;i<=10;i++){
users.push({id:i,name:`apple${i}`,age:i});
}
await UserModel.create(users)
})()(async function(){
let result = await UserModel.create({name:"apple",age:1});
console.log("result",result)
let docs = await UserModel.find();
console.log("docs",docs)
})()
(async function(){
let docs = await UserModel.find({name:"apple1"});
console.log("docs",docs)
})()(async function(){
let docs = await UserModel.findOne({});
console.log(docs);
})()(async function(){
let docs = await UserModel.findById("5e3a21d5a8019b2c0c157373")
console.log(docs);
})()条件 | 符号 |
|---|---|
大于 | gt |
小于 | lt |
大于等于 | ge |
不等于 | ne |
包含 | in |
(async function(){
let doc = await UserModel.find({'age':{'$gt':5}})
console.log(docs);
})()(async function(){
let docs = await UserModel.find({'age':{'$in':[5,6,7]}})
console.log(docs)
})() (async function(){
let docs = await UserModel.find({'$or':[{'age':{'$gt':7}},{'age':{'$lt':3}}]})
console.log(docs)
})()(async function(){
let pageSize = 3;
let pageNumber = 2;
let docs = await UserModel.find({}).sort({age:-1}).skip((pageNumber-1)*pageSize).limit(pageSize);
console.log(docs)
})()每页3条 查询第2页 1 2 3 4 5 6 7 8 9 10
sort 指定排序的字段和升序还是降序 1,-1skip 指定跳过几条,忽略几条limit 限定返回的最大条数update有两个参数,第一个参数是条件,第二个参数是更新后的值
(async function(){
let result = await UserModel.update({name:"apple"},{name:"orange"});
console.log(result);
})()
n是匹配的条件 nModified表示实际发生更新操作的条数
更新还涉及到updateOne和updateMany。
updateOne顾名思义如果找到多条记录,则只更新一条。updateMany同理如果找到多条记录,则更新所有匹配的记录删除是艰巨的任务,毕竟删库跑路一直都备受关注,所以在使用的时候一定要小心☠。
remove删除所有匹配的记录。 (async function(){
let result = await UserModel.remove({name:"orange"})
console.log(result);
})()
eleteOne删除第一条 后面不再匹配 更不会删除eleteMany删除所有的匹配的条数ulkWrite于批量插入,修改,删除操作let ScoreSchema = new Schema({
uid:{type:mongoose.Schema.Types.ObjectId,ref:'User'},
grade:Number
})
let Score = connection.model("Score",ScoreSchema);
(async function(){
let user = await User.create({name:"pear"}); //先创建主表
console.log(user);
let score = await Score.create({uid:user._id,grade:100});
console.log(score);
})()
我们在上面的准备工作里创建了一个UserScheme集合结构,在这里我们又创建ScoreSchema的表结构,在ScoreSchema结构里面uid是一个外键,类型是一个ObjectId类型,用于标志存储数据的唯一性。使用了一个ref的类型是引用的User模型
(async function(scoreId){
let score = await Score.findById(scoreId).populate('uid');
console.log(score);
})("5f22712e78f5d73c7cae4b2f")
上图使用了populate是填充的意思 就是把一个外键字段 从一个ObjectId变成另外一个字段来实现联表查询。
本文结束,有什么问题和有错误的地方,欢迎大家的留言和评论,还有后续更新,下期更加精彩 ???