【mongoose】mongoose 基本使用

1. 连接数据库

js 复制代码
// 1. 安装 mongoose
// 2. 导入 mongoose
const mongoose = require('mongoose')
// 3. 连接 mongodb 服务
mongoose.connect('mongodb://127.0.0.1:27017/xx_project')
// 4. 设置回调   .on 一直重复连接  .once 只连接一次
mongoose.connection.on('open', () => {
  // console.log('数据库连接成功')
  // 5. 创建类型约束模型对象
  let BookSchema = new mongoose.Schema({
    name: String,
    author: String,
    price: Number
  })
  // 6. 创建模型对象 对文档操作的封装对象
  let BookModel = mongoose.model('books', BookSchema)
  // 7. 新增
  BookModel.create({
    name: '《算法导论》',
    author: 'Thomas H.Cormen',
    price: 100
  }).then(data => {
    console.log(data)
    // 8. 关闭数据库连接(项目运行时不添加该代码)
    mongoose.disconnect()
  }).catch(err => {
    console.log(err)
    // 8. 关闭数据库连接(项目运行时不添加该代码)
    mongoose.disconnect()
  })
})
mongoose.connection.on('error', () => {
  console.log('数据库连接失败')
})
mongoose.connection.on('close', () => {
  console.log('数据库连接关闭')
})

2. 增删改查

2.1 增加

mongoose 会使用集合名称的负数,创建集合。

js 复制代码
BookModel.create({
    name: '《算法导论》',
    author: 'Thomas H.Cormen',
    price: 100
  }).then(data => {
    console.log(data)
    // 8. 关闭数据库连接(项目运行时不添加该代码)
    mongoose.disconnect()
  }).catch(err => {
    console.log(err)
    // 8. 关闭数据库连接(项目运行时不添加该代码)
    mongoose.disconnect()
  })
js 复制代码
  BookModel.insertMany([{
   name: '《算法导论》',
   author: 'Thomas H.Cormen',
   price: 100
 },{
   name: '《数据结构与算法分析》',
   author: 'Mark Allen Weis',
   price: 100
 }])

2.2 删除

js 复制代码
BookModel.deleteOne({ _id: '6548d59fe5c1c46771893963' })
BookModel.deleteMany({author:'Jay'})

2.3 更新

js 复制代码
BookModel.updateOne({
  name: '《算法》'
}, {
  $set: {
    price: 100000
  }
})
js 复制代码
BookModel.updateMany({author: 'Leehom Wang'}, {author: '王力宏'})

2.4 查询

js 复制代码
SongModel.findOne({author: '王力宏'})
SongModel.findById('5dd662b5381fc316b44ce167')
SongModel.find()
SongModel.find({author: '王力宏'})

3. 字段设置

js 复制代码
title: {
  type: String,
  required: true,  // 必填
  default: '匿名'  // 默认值
},
gender: {
  type: String,
  enum: ['male', 'female']  // 枚举值
},
username: {
  type: String,
  unique: true  // 唯一值
},

4. 条件控制

4.1 运算符

在 mongodb 不能 > < >= <= !== 等运算符,需要使用替代符号。

  • > 使用 $gt
  • < 使用 $lt
  • >= 使用 $gte
  • <= 使用 $lte
  • !== 使用 $ne
js 复制代码
BookModel.find({id:{$gt:3}}); // id号比3大的所有的记录

4.2 逻辑运算

$or 逻辑或的情况

js 复制代码
BookModel.find({$or:[{age:18},{age:24}]});

$and 逻辑与的情况

js 复制代码
BookModel.find({$and: [{age: {$lt:20}}, {age: {$gt: 15}}]});

4.3 正则匹配

js 复制代码
BookModel.find({name :/you/})

5. 个性化读取

方法可以链式调用。

5.1 字段筛选

1:显示

0:不显示

js 复制代码
BookModel.find().select({name: 1, author: 1, _id: 0}).exec()
.then(data=> {
  console.log(data)
}).catch(err=> {
  console.log(err)
})

5.2 数据排序

1:升序

-1:倒序

js 复制代码
BookModel.find().sort({price: 1}).exec()
.then(data=> {
  console.log(data)
}).catch(err=> {
  console.log(err)
})

5.3 数据截取

返回开始三个对象:

js 复制代码
BookModel.find().sort({price: 1}).limit(3).exec()
.then(data=> {
  console.log(data)
}).catch(err=> {
  console.log(err)
})

取出第四到六个:

js 复制代码
BookModel.find().sort({ price: 1 }).skip(3).limit(3).exec()
.then(data => {
  console.log(data)
}).catch(err => {
  console.log(err)
})

6. 代码模块化

js 复制代码
相关推荐
专业抄代码选手3 小时前
08|Fiber 上的 `useState`:状态终于属于具体组件
前端·javascript·react.js
默_笙3 小时前
😭 Vibe Coding 翻车实录:AI 编程为什么必须先写"剧本"
前端·javascript
lerhxx4 小时前
我用 R3F 手搓了一个能走进去的 3D 迷宫简历(上):从选型架构到迷宫生成算法
前端·javascript·three.js
鹏多多9 小时前
PC 网站接入微信登录,这 10 个坑我替你踩完了!
前端·javascript·vue.js
用户2986985301410 小时前
React 中 HTML 内容转 Word 文档的实现方案
javascript·react.js·html
mONESY10 小时前
我用 Next.js 16 + Supabase 从零做了个「背单词」H5 应用
javascript
boooooooom10 小时前
手把手做一个图 RAG 烹饪问答系统:Neo4j + Milvus + LLM 的工程实践
前端·javascript·后端
染指111013 小时前
103.RAG-LLamaIndex后端rag问答-聊天接口
前端·javascript·vue.js·人工智能
单线程_0121 小时前
从案例分析 Vue3 Tokenizer+Parser 源码三
前端·javascript·vue.js
小磊哥er1 天前
深入解构Claude Code - 第 8 篇 · 数据放哪、钱怎么算
javascript·ai编程