在 Node.js 框架中,使用 Mongoose 是必不可少的一步。而在使用 Mongoose 的时候,Schema 和 Model 是不可或缺的两部分。本文将会详细讲解 Mongoose 中的 Schema 和 Model 的概念、用法,并附带实例代码,帮助读者深入理解。
Schema 是什么?
在 Mongoose 中,Schema 可以看作是一个集合的定义。它规定了集合中文档的结构,包含了字段名称、类型、默认值、格式校验等等。Schema 可以通过一个对象来定义。每一个 Schema 都需要一个 _id
字段。
下面是一个简单的 Schema 的例子:
-- -------------------- ---- ------- ----- - ------ - - -------------------- ----- ---------- - --- -------- ----- ------- ---- ------- ------ - ----- ------- --------- ----- ------- ----- -- ---
在上面的例子中,定义了一个叫做 userSchema
的 Schema,包含了三个字段:name
、age
、email
。其中 email
字段定义了 type
、required
、unique
三个属性,分别表示类型为字符串、必填、唯一。
需要注意的是,Schema 中还可以定义虚拟属性(virtual)和 getters/setters(即当我们读取属性值的时候、或者设置属性值的时候、对其进行操作)等。
Model 是什么?
Model 则是 Mongoose 中的核心概念,它是与数据库进行交互的对象。Model 是由 Schema 创建而来,每个 Model 都是一个集合(collection)的代表,并且具有增删改查等操作的能力。我们平时的 CRUD 操作就是直接通过 Model 进行的。
下面是一个通过 Schema 创建 Model 的例子:
const { model } = require('mongoose'); const User = model('User', userSchema);
在上面的例子中,通过 model()
方法创建了一个名叫 User
的 Model,指定它使用前面定义的 userSchema
。这样就创建了一个表名为 users
的集合,并可以用 User
对象进行操作。
可以看到,创建 Model 的时候需要传递两个参数,一个是集合的名称,另一个则是该集合对应的 Schema。
增删改查怎么做?
对于一个已经通过 Schema 和 Model 定义好的集合,我们可以直接使用它提供的方法进行 CRUD 操作。下面是一些常用的方法:
1. 插入数据
我们可以通过 create()
方法来插入一条新数据。它的用法是:
const newUser = { name: '小明', age: 18, email: 'xiaoming@example.com' }; User.create(newUser, (err, data) => { if (err) { console.log(`创建数据失败,错误信息为:${err}`); } else { console.log(`创建数据成功,返回值:${data}`); } });
上面的例子中,首先定义了一个 newUser
对象,表示要新增的用户信息,然后使用 User.create()
方法来将这个对象插入到数据库中。
当然,也可以使用 save()
方法来插入数据,它的用法如下:
const newUser = new User({ name: '小明', age: 18, email: 'xiaoming@example.com' }); newUser.save((err, data) => { if (err) { console.log(`创建数据失败,错误信息为:${err}`); } else { console.log(`创建数据成功,返回值:${data}`); } });
2. 查询数据
查询数据是最常见的数据操作之一。Mongoose 提供了很多种查询方式,下面是其中几种常见的:
-- -------------------- ---- ------- -- ------ ------------- ----- ----- -- - -- --- -- --- -- -------- ----------- ----- ---- -- ----- ----- -- - -- --- -- --- ----------- ---- - ----- -- - -- ----- ----- -- - -- --- -- --- -- ------ -------------- ------ ---------------------- -- ----- ----- -- - -- --- -- ---
上面的例子中,我们可以看到 find()
方法和 findOne()
方法。第一个方法返回多个数据,而第二个方法则是返回一个数据。两者的参数都是一个查询条件对象,不同的是,find()
方法返回的是一个数组,而 findOne()
方法返回的是一个对象。
Mongoose 中还提供了更高级的查询方式,比如 findById()
、where()
等方法。读者可以自行了解,这里不再赘述。
3. 更新数据
最常见的更新方式就是通过 updateOne()
方法来更新一条数据。其用法如下所示:
User.updateOne({ email: 'xiaoming@example.com' }, { age: 19 }, (err, data) => { /* ... */ });
上面的例子中,我们通过 updateOne()
方法更新一条数据。首先我们传递了一个查询条件对象 { email: 'xiaoming@example.com' }
表示我们要更新哪一条数据。然后我们传递了一个更新对象 { age: 19 }
,其中只包含了要更新的部分。
4. 删除数据
删除数据也是常见的数据操作之一。可以使用 deleteOne()
方法或 deleteMany()
方法来删除一条或多条数据。它们的用法如下:
// 删除一条数据 User.deleteOne({ email: 'xiaoming@example.com' }, (err, data) => { /* ... */ }); // 删除多条数据 User.deleteMany({ age: { $gte: 18 } }, (err, data) => { /* ... */ });
总结
在本文中,我们详细讲解了 Mongoose 中的 Schema 和 Model 的概念、用法,并通过例子代码帮助读者深入理解。希望本文可以帮助大家更好地掌握 Mongoose,顺利开发应用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64ddc192f6b2d6eab38fecaa