当前位置: 首页 > news >正文

mongoose插入文档,字段类型, 字段验证, 删除文档,更新文档,读取文档,查询文档的条件控制 ,字段筛选,数据排序,数据截取

、Mongoose 中与 文档操作(插入、查询、更新、删除)及其相关功能(字段类型、验证、条件筛选、排序、分页等)相关示例:


📋 一、字段类型定义(Schema Types)

const mongoose = require('mongoose')const userSchema = new mongoose.Schema({name: { type: String, required: true },           // 字符串,必须填age: { type: Number, min: 0, max: 120 },           // 数字,限定范围email: { type: String, unique: true },            // 字符串,唯一createdAt: { type: Date, default: Date.now },     // 日期,默认值isActive: { type: Boolean, default: true }        // 布尔值
})const User = mongoose.model('User', userSchema)

📝 二、插入文档

1. 插入一个文档

User.create({ name: 'Tom', age: 25, email: 'tom@example.com' })

2. 批量插入

User.insertMany([{ name: 'Alice', age: 30, email: 'alice@example.com' },{ name: 'Bob', age: 22, email: 'bob@example.com' }
])

🔍 三、读取/查询文档

1. 查询全部

User.find()

2. 条件查询(条件控制)

User.find({ age: { $gte: 20, $lte: 30 }, isActive: true })

常用条件控制操作符:

  • $gt:大于
  • $lt:小于
  • $gte:大于等于
  • $lte:小于等于
  • $ne:不等于
  • $in:包含在数组中
  • $or:或条件
User.find({ $or: [ { age: { $lt: 20 } }, { isActive: false } ] })

🎯 四、字段筛选(只返回部分字段)

User.find({}, 'name email')        // 只返回 name 和 email 字段
User.find().select('name -_id')    // 返回 name 字段,不返回 _id

🔃 五、更新文档

1. 更新一个文档

User.updateOne({ name: 'Tom' }, { $set: { age: 26 } })

2. 更新多个文档

User.updateMany({ isActive: false }, { $set: { isActive: true } })

3. findOneAndUpdate(返回更新前的文档)

User.findOneAndUpdate({ email: 'tom@example.com' },{ $set: { age: 27 } },{ new: true } // 返回更新后的文档
)

❌ 六、删除文档

1. 删除一个

User.deleteOne({ name: 'Bob' })

2. 删除多个

User.deleteMany({ isActive: false })

🔢 七、排序、截取(分页)

1. 排序

User.find().sort({ age: -1 })  // 按 age 倒序(-1),升序为 1

2. 跳过前 N 条(skip)+ 取 N 条(limit)

User.find().skip(10).limit(5)  // 第 11~15 条

✅ 示例组合:分页 + 条件 + 筛选 + 排序

User.find({ age: { $gt: 18 } })     // 条件.select('name age -_id')          // 字段筛选.sort({ age: 1 })                 // 排序.skip(0)                          // 分页开始.limit(10)                        // 每页10条

相关文章:

  • C语言教程(二十四):C 语言中递归的详解
  • Alibaba第四版JDK源码学习笔记2025首次开源
  • C++搞定周岁.虚岁计算
  • 一页概览:统一数据保护方案
  • 【系统参数合法性校验】spring-boot-starter-validation
  • 前端Vue3 + 后端Spring Boot,前端取消请求后端处理逻辑分析
  • 【MySQL】(9) 视图
  • 跟我学C++中级篇——控制死锁
  • Qt开发:JSON字符串的序列化和反序列化
  • 【OSG学习笔记】Day 14: 操作器(Manipulator)的深度使用
  • 基于机器学习的电影票房预测
  • 万象生鲜配送系统代码2025年4月29日更新日志
  • LeetCode 155题解 | 最小栈
  • 【Leetcode 每日一题 - 补卡】2302. 统计得分小于 K 的子数组数目
  • Linux电源管理(3)_关机和重启的过程
  • 第十六届蓝桥杯 2025 C/C++组 密密摆放
  • 探索语音增强中的多尺度时间频率卷积网络(TFCM):代码解析与概念介绍
  • AI赋能的问答系统:2025年API接口实战技巧
  • 【Redis——数据类型和内部编码和Redis使用单线程模型的分析】
  • 基于Arduino的STM32F103RCT6最小系统板的测试及串口通讯
  • 广东省副省长刘红兵跨省任湖南省委常委、宣传部部长
  • 今年一季度全国城镇新增就业308万人,就业形势保持总体稳定
  • 我国首部《人工智能气象应用服务办法》今天发布
  • 牛市早报|国家发改委:将推出做好稳就业稳经济推动高质量发展若干举措
  • 太好玩了!坐进大卫·霍克尼的敞篷车进入他画笔下的四季
  • 报告显示2024年全球军费开支增幅达冷战后最大