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

mongodb 5.0.19

下载

下载地址
mongodb mongoose 数据库增删改查基本操作_第1张图片

  • 安装到 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)
    mongodb mongoose 数据库增删改查基本操作_第2张图片

  • 打开cmd 输入 mongod 命令 启动数据库
    mongodb mongoose 数据库增删改查基本操作_第3张图片

  • 再打开一个 cmd 窗口执行 mongo 命令,此时可以输入数据库命令
    mongodb mongoose 数据库增删改查基本操作_第4张图片

.每次启动麻烦可下载 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 日期
Buffer Buffer 对象
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();

你可能感兴趣的:(node,数据库,数据库,mongodb)