前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mogoose 创建数据库并增删改查

mogoose 创建数据库并增删改查

原创
作者头像
艳艳代码杂货店
修改2021-09-26 09:40:22
5.1K0
修改2021-09-26 09:40:22
举报
文章被收录于专栏:艳艳代码杂货店

下载

npm i mongoose -s

连接数据库

代码语言:javascript
复制
const mongoose = require("mongoose");
mongoose.connect(dbURL);

const db = mongoose.connection;

db.on("error", () => {
    console.log("链接失败");
});
db.on("open", () => {
    console.log("链接成功");
});

创建表结构Schema

Schema相当于MySql的表结构

通过定义Schema来约束数据的类型,支持以下类型数据

类型

作用

String

定义字符串

Number

定义数字

Date

定义日期

Buffer

定义二进制

Boolean

定义布尔值

Mixed

定义混合类型

ObjectId

定义对象ID

Array

定义数组

Decimal128

Map

约束能用对象的方法描述数据类型 是否必须 是否重复 默认值 等,如下定义了一个用户表结构

注意:如果定义表结构时没有定义_id,mongoose会自己添加一个该字段,该字段不会重复,类型为ObjectId,通过findById()查询

代码语言:javascript
复制
const userSachem = new mongoose.Schema(
    {
        name: {
            type: String,
            required: true, //! 必须
        },
        email: {
            type: String,
            required: true,
            unique: true, //! 不重复
        },
        passWord: {
            type: String,
            required: true,
        },
        avatar: {
            type: String,
            default: null, //! 默认值
        },
        bio: String, //! 默认没有可以不写
    },
    {
        timestamps: true, //! 添加`createdAt updatedAt`创建时间和更新时间两个字段
    }
);

如果在定义了结构后需要添加新字段,在实例上使用add()方法

创建表model

通过mongoose.model(name,sechem)来创建表结构构造器,通过传入数据来实例化构造器获得具体的表

注意:在这一步的时候数据库已经有了表,表名全是小写且表明为name加上s,如这里会创建表users

代码语言:javascript
复制
const User = mongoose.model("User", userSechem);

通过上面的操作就获得了表的构造函数,接下来就可以向里面进行增删改查了

有三种方法在表内增加数据:

通过实例化数据:

  • 创建表数据实例化model

通过传入具体的数据来实例化表,能获得一条具体的表数据,类型为Mongoose Documents,向数据库中查找到的也是这种类型数据

代码语言:javascript
复制
const user = new User(userData);
  • 保存save

获得具体的表后只需要调用Model.prototype.save就会把数据存入数据库中 注意:该方法为异步方法

代码语言:javascript
复制
await user.save();

通过Model.create方法:

通过表构造器的静态方法create自动在表中插入新的数据

该方法可以接收多个插入数据,最后的回调函数参数根据数据量决定

该方法支持两种调用:

  • 错误优先的回调
  • async await
代码语言:javascript
复制
const users = await User.create(
    { name: "1", email: "123@qq.com", passWord: "123" },
    { name: "2", email: "456@qq.com", passWord: "456" },
    { name: "3", email: "789@qq.com", passWord: "789" }
);
res.status(200).json(users); // users是数组

// 或者
User.create(
    { name: "str", email: "159@163.com", passWord: "159" },
    { name: "1", email: "123@qq.com", passWord: "123" },
    { name: "2", email: "456@qq.com", passWord: "456" },
    { name: "3", email: "789@qq.com", passWord: "789" },
    (err, doc1, doc2, doc3) => {
        if (err) {
            return err;
        }
        res.status(200).json({ doc1, doc2, doc3 });
    }
);

通过Model.insertMany方法

该方法与create的区别是它接收的第一个参数是数据组成的数组,多条数据只会插入第一条

代码语言:javascript
复制
const user = await User.insertMany({ name: "1", email: "123@qq.com", passWord: "123" });
const users = await User.insertMany([
    { name: "2", email: "456@qq.com", passWord: "456" },
    { name: "3", email: "789@qq.com", passWord: "789" },
]);

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 下载
  • 连接数据库
  • 创建表结构Schema
  • 创建表model
    • 通过实例化数据:
      • 通过Model.create方法:
        • 通过Model.insertMany方法
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档