mongoose入门以及mongoose实现数据的增删改查(有代码简单易上手)

这篇博客介绍了mongoose的基础知识,包括mongoose的简介和特点。它强调mongoose是用于node.js环境中操作mongodb的库,提供了关系型数据库思想的设计方式。博客详细阐述了mongoose的安装步骤,并展示了如何在VS Code中建立数据库连接。此外,还通过fruits.js文件演示了如何定义Schema、创建Model以及进行数据的增删改查操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mongoose入门以及mongoose实现数据的增删改查

什么是mongoose?

  1. mongoose的简介

    • mongoose是在node.js异步环境下对mongodb进行辩解操作的对象模工具。

    • mongoose是node的驱动,不能作为其他语言的驱动。

  2. mongoose两个特点

    • 通过关系型数据库的思想来设计非关系型数据库

    • 基于mongodb驱动,简化操作

  3. 理解mongoose(三个基本概念

    • Schema: 相当于一个数据库的模板·. Model可以通过mongoose.model 集成其基本属性内容. 当然也可以选择不继承.

    • Model: 基本文档数据的父类,通过集成Schema定义的基本方法和属性得到相关的内容的模型.

    • Instance: 通过 new Model()初始化得到的数据.

mongoose的安装以及使用流程

说明:本人使用VS Code编译器进行操作演示

  1. 新建一个文件夹📁(test)作为项目目录并放置工作区(项目名不能为mongoose,否则无法安装mongoose)

  2. 在项目目录新建一个.js文件📃(conndb.js)

  3. 在test目录下进行操作

    • 初始化—在终端执行**npm init --yes**生成package.json文件

    • 安装mongoose—在终端执行**npm install mongoose --save**

      se2
  4. 在conndb.js文件中操作(此模块只做引入连接)

    • 引入mongoose

        var mongoose=require("momgoose") 
      
    • 与数据库建立连接

      mongoose.connect(
         'mongodb://127.0.0.1:27017/may',
         {useUnifiedTopology:true,useNewUrlParser:true},   
           function(err){
               if(err){
               console.log("连接失败!!!");
           }else{
               console.log("连接成功~~~");
           }
         }
        )
      

      参数一:连接地址【mongodb协议://IP地址:端口号/数据库名】

      mongoose1

      参数二:使用解析器来解析本次连接

      参数三:设置回调函数

    • 使用commonJS规范导出

      module.exports = mongoose	
      

      ⚠️:以上三个步骤完成后,在终端输入node conndb查看是否连接成功

      se3
  5. 新建一个fruits.js文件(此模块处理fruits的增删改查)

    • 引入连接数据库的代码

      var db = require("./conndb")
      
    • 定义Schema:创建集合fruits对应的模板(相当于表结构,在node.js里创建一个表结构)

      let fruitSchema = new db.Schema({
          'name':String,
          'price':Number
      })
      
      se5

      😊:Schema通过限制输入的字段类型来定义documents的基本字段和集合

    • 创建Model:把数据库中集合users和模版进行对应和绑定,建立通道

      let fruitModel = db.model('fruits',fruitSchema)
      

      参数一:集合名

      参数二:定义的Schema

      😊:Model才是操作数据库最直接的一块内容. 我们所有的CRUD就是围绕着Model 展开的

    • 把数据可以通过这个通道插入进去

      let object ={
          'name':"苹果",
          'price':10
      }
      
    • 将obj数据放入刚刚创建的模型中(相当于把内存中的数据放在硬盘上)

      let fruitEntity = new fruitModel(object) 
      
    • 进行增删改查操作(⚠️:每次操作都需要在终端输入node fruits.js重新连接)

      • 增加数据:save(),create(),insertMany()

        fruitEntity.save((err,data)=>{
             if(!err){
                 console.log("添加成功!");
                 console.log(data)
             }
         })
        
        se4
      • 更新数据:updateOne():更改一条数据,updateMany():更改多条数据

         fruitModel.updateOne({"name":"香蕉"},{$set:{"name":"梨"}}).then((data)=>{
             console.log(data)
             console.log("更新成功")
             },(err)=>{
                console.log("查询失败")
         })
        
      • 查询数据

        • 查询全部数据:find()

           fruitModel.find().then((data)=>{
             		console.log(data);
              	console.log("查询成功")
           			},(err)=>{
              		console.log("查询失败")
           })
          
        • 按照自定义条件查询所有数据:find({key:value})

           fruitModel.find({"name":"柠檬"}).then((data)=>{
                console.log(data);
                console.log("查询成功")
                },(err)=>{
                    console.log("查询失败")
           })
          
        • 按照自定义的条件查询一条数据:findOne({key:value})

           fruitModel.findOne({"name":"柠檬"}).then((data)=>{
               console.log(data);
               console.log("查询成功")
               },(err)=>{
                   console.log("查询失败")
           })
          
        • 条件查询:$lt 小于, $lte 小于等于 ,$gt 大于 , $gte 大于等于,$ne 不等于

           fruitModel.find({"price":{$ne:"10"}}).then((data)=>{
               console.log(data);
               console.log("查询成功")
               },(err)=>{
                   console.log("查询失败")
           })
          
        • 去重: distinct('字段名')

           fruitModel.distinct('name').then((data)=>{
               console.log(data);
               console.log("去重查询成功")
               },(err)=>{
                   console.log("去重查询失败")
           })
          
        • or查询

           fruitModel.find({$or:[{"name":"柠檬"},{"name":"梨"}]}).then((data)=>{
               console.log(data);
               console.log("or查询成功")
               },(err)=>{
                   console.log("or查询失败")
           })
          
        • limit()限制显示条数

           fruitModel.find().limit(4).then((data)=>{
               console.log(data);
               console.log("limit查询成功")
               },(err)=>{
                   console.log("limit查询失败")
           })
          
        • skip()跳过几条

           fruitModel.find().skip(3).then((data)=>{
               console.log(data);
               console.log("skip查询成功")
               },(err)=>{
                   console.log("skip查询失败")
           })
          
      • 删除: remove():不传入条件,删除全部

        • 条件删除

           fruitModel.remove({"name":"苹果"}).then((data)=>{
               console.log(data);
               console.log("remove成功")
               },(err)=>{
          				 console.log("remove失败")
           })      
          
        • 删除全部

           fruitModel.remove().then((data)=>{
               console.log(data);
               console.log("remove成功")
               },(err)=>{
                  console.log("remove失败")
           })
          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值