mongodb mongoose 数据库增删改查基本操作

news2024/12/23 19:05:10

mongodb 5.0.19

下载

下载地址
在这里插入图片描述

  • 安装到 C:\Program Files

  • c盘新建 C:\data\db

  • 找到 bin 目录(C:\Program Files\mongodb-windows-x86_64-5.0.19\mongodb-win32-x86_64-windows-5.0.19\bin)
    在这里插入图片描述

  • 打开cmd 输入 mongod 命令 启动数据库
    在这里插入图片描述

  • 再打开一个 cmd 窗口执行 mongo 命令,此时可以输入数据库命令
    在这里插入图片描述

.每次启动麻烦可下载 msi 文件,一键安装即可

数据库命令

显示所有数据库

show dbs

切换指定的数据库

use 数据库名

显示当前所在的数据库

db;

删除当前数据库

db.dropDatabase();

创建集合

db("db_name").createCollection("collection");
db.createCollection("user");

显示所有集合

show collections

删除某个集合

db.user.drop();

重命名集合

db.user.renameCollection("users");

插入文档

db.users.insert({ name: "xr", age: 20 });

查询文档

db.users.find();

更新文档

db.users.update(查询条件,新的文档)
db.users.update({age:20},{$set:{age:18}})

删除文档

db.users.drop(查询条件);

mongoose 7.3.4

下载

npm install mongoose

连接数据库

const mongoose = require("mongoose");

mongoose.connect("mongodb://127.0.0.1:27017/db_name");

mongoose.connection.once("open", () => {
	console.log("链接成功");
});

mongoose.connection.on("error", () => {
	console.log("链接失败");
});

mongoose.connection.on("close", () => {
	console.log("链接关闭");
});

setTimeout(() => {
	// 测试关闭连接
	mongoose.disconnect();
}, 2000);

promise 风格连接

const mongoose = require("mongoose");

mongoose
  .connect("mongodb://127.0.0.1:27017/db_name")
  .then((res) => {
    console.log("连接成功");
  })
  .catch((err) => {
    console.log(err);
  });

操作数据库 增删改查

常用字段类型

类型描述
String字符串
Number数字
Boolean布尔值
Array数组也可使用 []
Date日期
BufferBuffer 对象
Mixed任意类型,mongoose.Schema.Typea.Mixed
ObjectId对象 id,mongoose.Schema.Typea.ObjectId
Decimal128高精度数字,mongoose.Schema.Typea.Decimal128

创建 Schema

const Schema = new mongoose.Schema({
	name: {
		type: String,
    	// 必填项
		required: true,
    	// 默认值
    	default: '默认值',
    	// 枚举值
    	enum:['男','女']
    	// 唯一值
    	unique: true,
    	// 查询时不展示此字段
    	select: false
	},
}, {
	// 添加创建 更新时间字段
    timestamps: true,
  });
mongoose.connection.once("open", async () => {
	// 创建文档结构对象
	const Schema = new mongoose.Schema({
		name: {
			type: String,
			required: true,
		},
		age: Number,
		isAdmin: Boolean,
		tags: Array,
		createTime: {
			type: Date,
			default: new Date(),
		},
		mixed: mongoose.Schema.Types.Mixed,
	});

	// 创建数据模型
	const UserModel = mongoose.model("users", Schema);

	// 新增
	const data = await UserModel.create({
		name: "李四",
		age: 28,
		isAdmin: true,
		tags: ["JavaScript", "Node"],
		mixed: "test",
	});
});

const data = await UserModel.create({
	name: "李四",
	age: 28,
	isAdmin: true,
	tags: ["JavaScript", "Node"],
	mixed: "test",
});

deleteOne(条件);

const data = await UserModel.deleteOne({ name: "张三" });

const data = await UserModel.deleteMany({ name: "xm" });

updateOne(条件, 更改值);

const data = await UserModel.updateOne({ _id: "64b567014b5d8e70416465dd" }, { isAdmin: false });

const data = await UserModel.updateMany({ name: "李四" }, { isAdmin: false });

const data = await UserModel.findOne({ _id: "64b560dcf9d01fd3a213a5d1" });

const data = await UserModel.findById("64b560dcf9d01fd3a213a5d1");

const data = await UserModel.find({ name: "李四" });

条件控制

运算符

运算符替代
>$gt
<$lt
>=$gte
<=$lte
!==$ne
// 查询 age >= 26
const data = await UserModel.find({ age: { $gte: 26 } });

逻辑运算符

$or 逻辑或

// 查询 age = 26,或者  age = 27
const data = await UserModel.find({ $or: [{ age: 26 }, { age: 27 }] });

$and 逻辑与

// 查询 age = 26,并且 nme = "李四"
const data = await UserModel.find({ $and: [{ age: 26 }, { name: "李四" }] });

正则匹配

// 查询 name 包含 李,可用作模糊查询
const data = await UserModel.find({ name: // });

const data = await UserModel.find({ name: new RegExp("李") });

个性化读取

字段筛选,查询数据隐藏某些字段 select

0 不要的字段 1 需要的字段

const data = await UserModel.find({ name: "xr" }).select({ isAdmin: 0 }).exec();

数据排序 sort

1 升序 -1 倒序

// 查询根据年龄升序
const data = await UserModel.find().sort({ age: 1 }).exec();

数据截取, 可用来分页

skip 跳过 limit 限定

const data = await UserModel.find().skip(1).limit(1).exec();

const page = 3;
const limit = 1;
const data = await UserModel.find()
	.skip((page - 1) / limit)
	.limit(limit)
	.exec();

关联表查询 populate

表结构

const mongoose = require("mongoose");

const UserSchema = new mongoose.Schema(
	{
		name: String,
		age: Number,
		sex: Number,
	},
	{
		timestamps: true,
	}
);

const UserModel = mongoose.model("user", UserSchema);

const ArticleSchema = new mongoose.Schema(
	{
		title: {
			type: String,
			required: true,
		},
		desc: String,
		tag: Array,
		// 返回一个对象 author: { ... }
		// author:类型是 ObjectId 值是 user 表数据 _id,
		// ref: 连接的表名
		author: { type: mongoose.Schema.Types.ObjectId, ref: "user" },
		// 返回结构是一个数组套对象 [{ ... }]
		// author: [{ type: mongoose.Schema.Types.ObjectId, ref: "user" }],
	},
	{
		timestamps: true,
	}
);

const ArticleModel = mongoose.model("article", ArticleSchema);

module.exports = {
	UserModel,
	ArticleModel,
};

查询

const { UserModel, ArticleModel } = require("../model/index");

class IndexController {
	async getArticle(ctx) {
		try {
			// 字符串参数写法
			// select:显示 name 字段,隐藏 _id 字段
			// const data = await ArticleModel.find().populate("author","name -_id").exec();

			// 对象参数写法
			const data = await ArticleModel.find().populate({ path: "author", select: "name -_id" }).exec();

			ctx.body = {
				data,
			};
		} catch (error) {
			console.error(error);
		}
	}
}

module.exports = new IndexController();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/790808.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5分钟搞懂池化的本质

大家好啊&#xff0c;我是董董灿&#xff01; 在很多与计算机视觉相关的神经网络中&#xff0c;我们往往都会看到池化这一算法&#xff0c;它一般跟在卷积层后面。 神经网络中用到最多的池化方式无外乎是最大池化和平均池化。两者运算接近&#xff0c;区别在于是在kernel范围…

Labelme制作COCO格式的图像语义分割数据集

1.按照labelme工具地址先配置安装labelme&#xff1a;GitHub - wkentaro/labelme: Image Polygonal Annotation with Python (polygon, rectangle, circle, line, point and image-level flag annotation). 2.给自己的数据集画多边形框-Create Polygons 每张图像画完框后&#…

基于GPT4模型编写基于flask和mysql的web网站教程

目录 一、基于GPT4网络模型编写网站代码编写 三.效果1 首页2 登陆&#xff1a;3 注册4 数据库 项目地址 &#xff1a;https://download.csdn.net/download/u014541881/88098143 一、基于GPT4网络模型编写网站 代码编写 我&#xff1a;请你帮我用flask写一个网站&#xff0c;…

Qt编程基础 | 第八章-QtDesigner | 8.2、布局管理器

一、布局管理器 使用Qt Designder进行控件布局时&#xff0c;经常会使用到布局管理器&#xff0c;下面介绍常用的属性 1、layoutStretch 设置控件的伸缩因子&#xff0c;如果这个值是0&#xff0c;将采用控件的大小将采用自身的sizePolicy。下面是一个具体的实例&#xff0c;界…

【雕爷学编程】Arduino动手做(87)---ULN2003步进电机模组3

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

百模大战:AI大模型的现状与发展

马斯克&#xff08;Elon Musk&#xff09;是一位著名的企业家和科技创新者&#xff0c;他是特斯拉汽车公司的创始人和首席执行官&#xff0c;也是SpaceX航天公司和SolarCity太阳能公司的创始人之一。他还参与了创办OpenAI人工智能研究实验室和Neuralink脑机接口公司。 马斯克以…

任务的创建与删除

Q: 什么是任务&#xff1f; A: 任务可以理解为进程/线程&#xff0c;创建一个任务&#xff0c;就会在内存开辟一个空间。 比如&#xff1a; 玩游戏&#xff0c;打篮球&#xff0c;开车&#xff0c;都可以视为任务。 Windows 系统中的 MarkText 、谷歌浏览器、记事本&#xff0…

基于ChatGPT聊天的零样本信息提取7.25

基于ChatGPT聊天的零样本信息提取 摘要介绍ChatIE用于零样本IE的多轮 QA 实验总结 摘要 零样本信息提取&#xff08;IE&#xff09;旨在从未注释的文本中构建IE系统。由于很少涉及人类干预&#xff0c;因此具有挑战性。 零样本IE减少了数据标记所需的时间和工作量。最近对大型…

TextDetMetric: 计算文本检测算法指标工具

Text Detect Metric 该库用于计算Precision、Recall和H-mean三个指标&#xff0c;用来评测文本检测算法效果。与魔搭-文本检测测试集配套使用。指标计算代码参考&#xff1a;PaddleOCR 和 DB 整体框架 #mermaid-svg-9uGq5YvkFv9Qoswh {font-family:"trebuchet ms",v…

账号列表的删除编辑提交

<template><div><plan title"账号列表"><!-- selection-change"handleSelectionChange"添加这个属性就是点击可以得到你想要的value值 --><el-tablestyle"width: 100%":data"list"selection-change"h…

Service Mesh之Istio基础入门

技术背景 分布式服务治理 所谓分布式服务治理就是对服务不断增长的复杂度的管控和管理&#xff1b;管控及管理包含网络拓扑变动、网络延时、通信安全、API网关、服务注册和发现、服务熔断容错、服务超时重试、服务部署、数据调用、分布式链路追踪等等&#xff1b; 服务治理历程…

JMeter(八):响应断言详解

响应断言 :对服务器的响应进行断言校验 (1)应用范围: main sample and sub sample, main sample only , sub-sample only , jmeter variable 关于应用范围,我们大多数勾选“main sample only” 就足够了,因为我们一个请求,实质上只有一个请求。但是当我们发一个请求时,…

Linux6.14 Docker Compose容器编排

文章目录 计算机系统5G云计算第四章 LINUX Docker Compose容器编排一、Compose概述1.Docker Compose 的概述2.Docker Compose 三大的概念 二、部署过程1.Docker Compose 环境安装2.YAML 文件格式及编写注意事项3.Docker Compose配置常用字段4.Docker Compose 常用命令5.Docker …

【C语言】常见的内存操作函数

目录 前言&#xff1a;1.memcpymemcpy函数介绍memcpy函数的模拟实现 2.memmovememmove函数介绍memmove函数的模拟实现 3.memcmp4.memset 前言&#xff1a; 紧接字符串函数&#xff0c;接下来介绍内存函数~~ ———————————————————— 1.memcpy memcpy函数介…

索尼移动硬盘数据丢失怎么办?索尼移动硬盘如何恢复数据

咨询案例&#xff1a;“我刚买的索尼移动硬盘&#xff0c;里面存了超多我的宝贝照片和视频。突然有一天&#xff0c;我发现这些数据全都不见了&#xff01;心凉了半截&#xff0c;我该怎么办&#xff1f;” ——索尼移动硬盘是一种常用的存储设备&#xff0c;它具有大容量、便携…

微软亚研院提出模型基础架构RetNet或将成为Transformer有力继承者

作为全新的神经网络架构&#xff0c;RetNet 同时实现了良好的扩展结果、并行训练、低成本部署和高效推理。这些特性将使 RetNet 有可能成为继 Transformer 之后大语言模型基础网络架构的有力继承者。实验数据也显示&#xff0c;在语言建模任务上&#xff1a; RetNet 可以达到与…

视频内存过大如何压缩变小?这个压缩方法了解一下

在日常生活中&#xff0c;不管是日常随手拍的视频还是在工作中遇到的视频文件&#xff0c;在编辑处理的时候&#xff0c;如果视频的内存过大&#xff0c;不仅会占用很大的内存&#xff0c;在传送的时候也会花费很长时间&#xff0c;这时候将视频给压缩一下就可以很好的解决这一…

直播程序源码开发建设:洞察全局,数据统计与分析功能

在信息时代的浪潮席卷下&#xff0c;直播程序源码平台成为了信息时代下的优秀产物之一&#xff0c;通过直播程序源码平台&#xff0c;人们既可以去获取信息、收获快乐&#xff1b;又可以开启一个随时随地&#xff0c;一台智能手机就可以做的工作&#xff0c;直播工作&#xff0…

ResMLP:具有数据效率训练的图像分类前馈网络

文章目录 ResMLP: Feedforward networks for image classification with data-efficient training摘要本文方法代码实验结果 ResMLP: Feedforward networks for image classification with data-efficient training 摘要 我们提出了ResMLP&#xff0c;一个完全建立在多层感知…

Windows系统创建新用户

1、以管理员身份启动cmd 2、开启administrator管理员账户 输入命令&#xff1a; net user Administrator /active:yes 3、切换到administrator用户 点击账户头像可以看见 4、创建新用户 WinR 键打开dos窗口输入&#xff1a;control userpasswords2 在弹出的“用户账户”中点…