MongoDB快速上手指南: Nodejs 中使用 MongoDB mongoose

2023年 7月 12日 52.3k 0

mongoose 是一个对象文档模型(ODM)库

mongoosejs.com/

  • 可以为文档创建一个模式结构(Schema)
  • 可以对模型中的对象/文档进行验证
  • 数据可以通过类型转换转换为对象模型
  • 可以使用中间件应用业务逻辑

6.1 mongoose 提供的新对象类型

  • Schema
    • 定义约束了数据库中的文档结构
    • 个人感觉类似于 SQL 中建表时事先规定表结构
  • Model
    • 集合中的所有文档的表示, 相当于 MongoDB 数据库中的 collection
  • Document
    • 表示集合中的具体文档, 相当于集合中的一个具体的文档

6.2 简单使用 Mongoose

mongoosejs.com/docs/guide.…

使用 mongoose 返回的是一个 mogoose Query object, mongoose 执行 query 语句后的结果会被传进 callback 函数 callback(error, result)

A mongoose query can be executed in one of two ways. First, if you pass in a callback function, Mongoose will execute the query asynchronously and pass the results to the callback.

A query also has a .then() function, and thus can be used as a promise.

const q = MyModel.updateMany({}, { isDeleted: true }, function() {
  console.log("Update 1");
}));

q.then(() => console.log("Update 2"));
q.then(() => console.log("Update 3"));
复制代码

上面这一段代码会执行三次 updateMany() 操作, 第一次是因为 callback, 之后的两次是因为 .then() (因为 .then() 也会调用 updatemany())

连接数据库并且创建 Model 类

const mongoose = require('mongoose');
// test is the name of database, will be created automatically
mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser: true});

const Cat = mongoose.model('Cat', { name: String });

const kitty = new Cat({ name: 'Zildjian' });
kitty.save().then(() => console.log('meow'));
复制代码

监听 MongoDB 数据库的连接状态

在 mongoose 对象中, 有一个属性叫做 connection, 该对象就表示数据库连接.通过监视该对象的状态, 可以来监听数据库的连接和端口

mongoose.connection.once("open", function() {
  console.log("connection opened.")
});

mongoose.connection.once("close", function() {
  console.log("connection closed.")
});
复制代码

6.3 Mongoose 的 CRUD

首先定义一个 Schema

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const blogSchema = new Schema({
    title:  String, // String is shorthand for {type: String}
    author: String,
    body:   String,
    comments: [{ body: String, date: Date }],
    date: { type: Date, default: Date.now },
    hidden: Boolean,
    meta: {
        votes: Number,
        favs:  Number
    }
});
复制代码

然后在 blogSchema 基础上创建 Model

const Blog = mongoose.model('Blog', blogSchema);
// ready to go!

module.exports = Blog;
复制代码

当调用上面这一行代码时, MongoDB 会做如下操作

  • 是否存在一个数据库叫做 Blog 啊? 没的话那就创建一个
  • 每次用到 Blog 库的时候都要注意内部数据要按照 blogSchema 来规定
  • 向数据库中插入文档数据

    Blog.create({
      title: "title"
      ...
    }, function (err){
      if (!err) {
        console.log("successful")
      }
    });
    复制代码

    简单的查询一下下

    // named john and at least 18 yo
    MyModel.find({ name: 'john', age: { $gte: 18 }});
    复制代码

    mongoose 支持的用法有:

    • Model.deleteMany()
    • Model.deleteOne()
    • Model.find()
    • Model.findById()
    • Model.findByIdAndDelete()
    • Model.findByIdAndRemove()
    • Model.findByIdAndUpdate()
    • Model.findOne()
    • Model.findOneAndDelete()
    • Model.findOneAndRemove()
    • Model.findOneAndReplace()
    • Model.findOneAndUpdate()
    • Model.replaceOne()
    • Model.updateMany()
    • Model.updateOne()

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论