Model方法

Sy_ Lv6

1. Models

上一篇笔记讲到了mongoose的基本用法,本次来讲一下oModel中的一些方法怎么用。

其实,有了Model我们就可以对数据库进行增删改查的操作了。

对于Model的方法,我们可以通过查阅官方的API文档来获得最新和最全面的了解:
官方文档API

20250326194830

这里讲一些看文档需要注意的点。Model.xxx风格的API表示Model构造函数的方法,可以用于创建对象。

Model#xxx风格的API表示Model创建的对象调用的方法,也就是文档对象调用的方法,当然我发现官方现在好像是这样写了:Object.prototype.xxx()

这里讲几个常用的API,自己去官方文档取经吧:

  • Model.find()
  • Model.create()
  • Model.findOne()

实际上,关于find的API就不少,实际使用还需自己根据情况来决定:

20250326195709

2. Document

2.1 添加

DocumentModel的一个示例,通过Model查询到的结果都是Document

我们其实可以直接创建一个Document(文档对象)其实就是最开始我说的官方推荐的写法:

1
2
3
4
const student = new StuModel({
name: "Sy",
age: 18
})

将这个文档对象打印出来就是:

1
2
3
4
5
6
7
{
name: 'Sy',
age: 15,
gender: 'male',
address: 'XJUFE',
_id: new ObjectId('67e3ecde490b511fb8c53cd2')
}

很容易发现,此时文档并没有被插入到数据库,仅仅是放到了内存中。

我们来讲他插入到数据库中(document#save()):

1
docs.save();

这里讲一下在我的Node.js项目中经常突然乍现的一个Bug:在运行项目后有时会突然报错

1
ReferenceError: require is not defined

查了一下是因为node更新的原因,现在默认要求用import语法,如果还是想要用require就需要:

1
2
import { createRequire } from 'module';
const require = createRequire(import.meta.url);

所以在保存文件时有两种方法:

1
2
docs.save();
Model.create({});

2.2 修改

修改docs也很简单,第一种方法当然是官方的API方法。

但其实也可以通过.分隔符来修改文档的属性:

1
2
docs.name = "Syyyo900";
await docs.save();

2.3 get和set

文档提供了一些很快捷的方法来直接得到文档的内容:

  • doc.get('age', String) 获取年龄并将数据转为字符串类型,第二个参数可选

文档还提供了set方法,可以快速修改文档的内容,有多种写法,可以参考API文档

2.4 其他

文档有一个doc.toJSON()方法,可以将该文档转为JSON对象。

doc.toObject()可以让文档变成一个普通的Object对象,但是会让所有文档的方法失效。

所以,只有在特殊情况下才会使用,比如需要删除文档中的敏感数据,想要调用delete docs.address来隐藏地址,就只能通过该方法来实现。

  • 标题: Model方法
  • 作者: Sy_
  • 创建于 : 2025-06-15 00:51:35
  • 更新于 : 2025-06-15 00:51:35
  • 链接: https://shenying.online//demo/vqh5zjut/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论