深入浅出mongodb(二)
时间:2022-07-25
本文章向大家介绍深入浅出mongodb(二),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
规划的根本目的是为了更快、更有效地达成目标。
前言
上篇文章<深入浅出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);
})()
通过ObjectId查询
(async function(){
let docs = await UserModel.findById("5e3a21d5a8019b2c0c157373")
console.log(docs);
})()
条件查询
条件 |
符号 |
---|---|
大于 |
gt |
小于 |
lt |
大于等于 |
ge |
不等于 |
ne |
包含 |
in |
- 大于gt查询
(async function(){
let doc = await UserModel.find({'age':{'$gt':5}})
console.log(docs);
})()
- 包含in
(async function(){
let docs = await UserModel.find({'age':{'$in':[5,6,7]}})
console.log(docs)
})()
- 小于7或者小于3
(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,-1 -
skip
指定跳过几条,忽略几条 -
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变成另外一个字段来实现联表查询。
最后
本文结束,有什么问题和有错误的地方,欢迎大家的留言和评论,还有后续更新,下期更加精彩 ???
- LVS中采用Jboss作为RealServer的配置要点
- 基于Prometheus的数据库监控
- Uva-------(11462) Age Sort(计数排序)
- hdu----(2848)Repository(trie树变形)
- 【MySQL】主从GTID复制修复
- hdu---(1800)Flying to the Mars(trie树)
- 解决Tomcat数据连接池无法释放
- hdu----(1075)What Are You Talking About(trie之查找)
- hdu--(1247)Hat’s Words(trie树)
- HDU----(4519)郑厂长系列故事——体检
- 张戈博客成功启用移动端主题:Mobile Pack
- Oracle数据库性能障碍分析利器:SYSTEMSTATE DUMP介绍
- hdu ---(4517)小小明系列故事——游戏的烦恼(Dp)
- HTTP加速器varnish安装小记(1)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- matplotlib绘图教程:设置标签与图例
- 企业是如何从头开发一个商业项目的?
- 基于Haproxy的高可用实战
- 组复制常规操作-分布式恢复 | 全方位认识 MySQL 8.0 Group Replication
- 赞!7000 字学习笔记,MySQL 从入到放弃
- 面试官问我Volatile的原理?从操作系统层面的设计怼回去!
- 设计原则之单一职责
- 设计原则之开闭原则
- SpringBoot执行跨域处理
- SpringBoot对全局异常的处理封装
- 自定义springboot-starter揭秘自动配置骚操作
- 【大厂面试题】Redis中是如何实现分布式锁的?
- 最近公司招人,研发组商量了下,暂时定下这么多java面试题!
- 市面上数据库种类那么多,如何选择?
- 玩转正则!推荐一个速查、调试、验证、可视化工具