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

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();
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 安装依赖 安装`express`、`mongoose`、`body-parser`和`cors`: ``` npm install express mongoose body-parser cors --save ``` 2. 连接数据库 在`app.js`中连接数据库: ```javascript const express = require('express'); const mongoose = require('mongoose'); const bodyParser = require('body-parser'); const cors = require('cors'); const app = express(); // 连接数据库 mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true }); const db = mongoose.connection; db.on('error', console.error.bind(console, '连接错误:')); db.once('open', function() { console.log('连接成功'); }); app.use(bodyParser.json()); app.use(cors()); app.listen(3000, () => console.log('服务器已启动')); ``` 3. 定义模型 在`models`文件夹下创建`user.js`文件,定义用户模型: ```javascript const mongoose = require('mongoose'); const userSchema = new mongoose.Schema({ name: String, age: Number, gender: String, }); const User = mongoose.model('User', userSchema); module.exports = User; ``` 4. 增加数据 在`app.js`中增加路由,实现增加用户功能: ```javascript const express = require('express'); const mongoose = require('mongoose'); const bodyParser = require('body-parser'); const cors = require('cors'); const User = require('./models/user'); const app = express(); // 连接数据库 mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true }); const db = mongoose.connection; db.on('error', console.error.bind(console, '连接错误:')); db.once('open', function() { console.log('连接成功'); }); app.use(bodyParser.json()); app.use(cors()); // 增加用户 app.post('/users', (req, res) => { const user = new User({ name: req.body.name, age: req.body.age, gender: req.body.gender, }); user.save((err, user) => { if (err) { console.error(err); res.sendStatus(500); } else { res.json(user); } }); }); app.listen(3000, () => console.log('服务器已启动')); ``` 5. 查询数据 在`app.js`中增加路由,实现查询用户功能: ```javascript const express = require('express'); const mongoose = require('mongoose'); const bodyParser = require('body-parser'); const cors = require('cors'); const User = require('./models/user'); const app = express(); // 连接数据库 mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true }); const db = mongoose.connection; db.on('error', console.error.bind(console, '连接错误:')); db.once('open', function() { console.log('连接成功'); }); app.use(bodyParser.json()); app.use(cors()); // 增加用户 app.post('/users', (req, res) => { const user = new User({ name: req.body.name, age: req.body.age, gender: req.body.gender, }); user.save((err, user) => { if (err) { console.error(err); res.sendStatus(500); } else { res.json(user); } }); }); // 查询用户 app.get('/users', (req, res) => { User.find((err, users) => { if (err) { console.error(err); res.sendStatus(500); } else { res.json(users); } }); }); app.listen(3000, () => console.log('服务器已启动')); ``` 6. 更新数据 在`app.js`中增加路由,实现更新用户功能: ```javascript const express = require('express'); const mongoose = require('mongoose'); const bodyParser = require('body-parser'); const cors = require('cors'); const User = require('./models/user'); const app = express(); // 连接数据库 mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true }); const db = mongoose.connection; db.on('error', console.error.bind(console, '连接错误:')); db.once('open', function() { console.log('连接成功'); }); app.use(bodyParser.json()); app.use(cors()); // 增加用户 app.post('/users', (req, res) => { const user = new User({ name: req.body.name, age: req.body.age, gender: req.body.gender, }); user.save((err, user) => { if (err) { console.error(err); res.sendStatus(500); } else { res.json(user); } }); }); // 查询用户 app.get('/users', (req, res) => { User.find((err, users) => { if (err) { console.error(err); res.sendStatus(500); } else { res.json(users); } }); }); // 更新用户 app.put('/users/:id', (req, res) => { User.findByIdAndUpdate(req.params.id, { $set: { name: req.body.name, age: req.body.age, gender: req.body.gender, }, }, { new: true }, (err, user) => { if (err) { console.error(err); res.sendStatus(500); } else { res.json(user);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值