什么是 JSON,它的主要用途是什么?# JSON 基础概念与用途
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于 JavaScript 的对象字面量语法,但已经成为一种独立于编程语言的通用数据格式。
## 主要用途
1. **数据交换**:在客户端和服务器之间传输数据,是 Web 应用中最常用的数据格式之一。
2. **配置文件**:许多应用和框架使用 JSON 作为配置文件格式,如 npm 的 package.json。
3. **数据存储**:在一些轻量级应用中,JSON 文件可以作为简单的数据库使用。
4. **API 响应**:大多数现代 API 都使...
服务端 · 2月25日 23:06
JSON 的语法规则有哪些?请列举并解释。# JSON 语法规则详解
JSON 语法基于 JavaScript 对象字面量语法,但有一些严格的规则需要遵守:
## 1. 数据结构
JSON 支持两种主要数据结构:
- **对象(Object)**:由键值对组成,使用花括号 `{}` 包围
- **数组(Array)**:由值组成的有序列表,使用方括号 `[]` 包围
## 2. 键值对规则
- **键名必须使用双引号**:`"name": "value"`,不能使用单引号或无引号
- **键值对之间使用逗号分隔**:`"name": "value", "age": 25`
- **最后一个键值对后不能有逗号**:这是...
服务端 · 2月25日 23:07
Mongoose 鉴别器(Discriminators)如何使用?Mongoose Discriminators(鉴别器)是一种模式继承机制,允许你在同一个集合中存储不同类型的文档,同时保持各自独特的字段和验证规则。这对于处理具有共同基础但又有特定差异的数据模型非常有用。
## 基本概念
### 创建基础 Schema
```javascript
const eventSchema = new Schema({
name: { type: String, required: true },
date: { type: Date, required: true },
location: String
}, {
discriminat...
服务端 · 2月22日 19:55
Mongoose Model 有哪些常用的 CRUD 操作方法?Mongoose Model 是由 Schema 编译而成的构造函数,用于创建和操作 MongoDB 文档。Model 实例代表数据库中的文档,并提供了丰富的 CRUD 操作方法。
## 创建 Model
```javascript
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
name: String,
email: String,
age: Number
});
// 创建 Model,第一个参数是集合名称(会自动转为复数)
const User = mo...
服务端 · 2月22日 19:41
Mongoose 实例方法和静态方法有什么区别?Mongoose 提供了实例方法和静态方法两种方式来扩展模型的功能。理解这两种方法的区别和使用场景对于编写可维护的代码非常重要。
## 实例方法(Instance Methods)
实例方法是添加到文档实例上的方法,可以在单个文档上调用。这些方法可以访问 `this` 关键字来引用当前文档。
### 定义实例方法
```javascript
const userSchema = new Schema({
firstName: String,
lastName: String,
email: String,
password: String,
createdAt...
服务端 · 2月22日 19:45
Mongoose 如何处理文档关联和 Populate 功能?Mongoose 提供了多种方式来处理文档之间的关联关系,包括引用(Reference)、嵌入(Embedding)和 Populate 功能。
## 关联类型
### 1. 嵌入式关联(Embedding)
将相关数据直接嵌入到父文档中,适合一对一或一对多关系,且子文档较小的情况。
```javascript
const addressSchema = new Schema({
street: String,
city: String,
country: String
});
const userSchema = new Schema({
name: Strin...
服务端 · 2月22日 19:42
Mongoose 性能优化有哪些最佳实践?Mongoose 性能优化是开发高效应用的关键。通过合理的配置和最佳实践,可以显著提升查询速度和整体性能。
## 连接优化
### 连接池配置
```javascript
mongoose.connect('mongodb://localhost:27017/mydb', {
maxPoolSize: 100, // 最大连接数
minPoolSize: 10, // 最小连接数
socketTimeoutMS: 45000, // 套接字超时
serverSelectionTimeoutMS: 5000, // 服务器选择超时
conne...
服务端 · 2月22日 19:44
Mongoose 子文档如何使用,有哪些应用场景?Mongoose 子文档(Subdocuments)是嵌套在父文档中的文档,它们可以是单个文档或文档数组。子文档提供了一种组织相关数据的方式,同时保持数据的完整性。
## 子文档类型
### 1. 嵌套 Schema(单个子文档)
```javascript
const addressSchema = new Schema({
street: String,
city: String,
state: String,
zipCode: String
});
const userSchema = new Schema({
name: String,
email...
服务端 · 2月22日 19:53
Mongoose 和原生 MongoDB 驱动有什么区别?Mongoose 和原生 MongoDB 驱动都是 Node.js 中与 MongoDB 交互的工具,但它们在设计理念、使用方式和适用场景上有显著差异。
## 主要区别
### 1. 抽象层次
**Mongoose(ODM - 对象数据模型)**
```javascript
const userSchema = new Schema({
name: { type: String, required: true },
email: { type: String, unique: true },
age: { type: Number, min: 0 }
});
cons...
服务端 · 2月22日 19:55
Mongoose 中间件和钩子如何工作,有哪些应用场景?Mongoose 中间件(Middleware)和钩子(Hooks)是强大的功能,允许在执行某些操作之前或之后执行自定义逻辑。中间件分为两类:文档中间件和查询中间件。
## 中间件类型
### 1. 文档中间件(Document Middleware)
在文档实例上执行的操作,如 `save()`、`validate()`、`remove()` 等。
```javascript
userSchema.pre('save', function(next) {
console.log('About to save user:', this.name);
next();
});
...
服务端 · 2月22日 19:42
