规划的根本目的是为了更快、更有效地达成目标。
上篇文章<深入浅出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变成另外一个字段来实现联表查询。
本文结束,有什么问题和有错误的地方,欢迎大家的留言和评论,还有后续更新,下期更加精彩 ???
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有