Tech-Paul

work hard, play hard

主要工具

  • bsondump - 以人类可读格式显示 BSON 文件
  • mongoimport - 将 JSON、TSV 或 CSV 数据转换并插入到集合中
  • mongoexport - 将现有集合写入 CSV 或 JSON 格式
  • mongodump/mongorestore - 将 MongoDB 备份以 .BSON 格式转储到磁盘,或将它们恢复到活动数据库
  • mongostat - 监控活动的 MongoDB 服务器、副本集或分片集群
  • mongofiles - GridFS 中读取、写入、删除或更新文件
  • mongotop - 监控 MongoDB 服务器上的读写活动

如有任何错误、改进或新功能请求,请报告至 https://jira.mongodb.org/browse/TOOLS

构建工具

我们目前使用 Go 1.15 版本构建工具。其他 Go 版本可能可用但未经测试。

直接使用 go get 构建工具将不起作用。要构建它们,建议首先克隆此仓库:

1
2
git clone https://github.com/mongodb/mongo-tools
cd mongo-tools

然后运行 ./make build 来构建所有工具,将它们放置在仓库内的 bin 目录中。运行 ./bin/mongodump --help 来验证构建的二进制文件是否正常工作。

您也可以使用 -pkgs 选项构建部分工具。例如,./make build -pkgs=mongodump,mongorestore 仅构建 mongodumpmongorestore

要使用此仓库中的构建/测试脚本,您**必须**将 GOROOT 设置为您的 Go 根目录。这可能取决于您安装 Go 的方式。

1
export GOROOT=/usr/local/go

仅限 Mac OS:

运行构建的二进制文件时,如果进程立即被终止,并且您看到以下输出:
zsh: killed ./bin/mongodump --help
那么您需要对二进制文件进行签名才能运行它:
codesign --force --sign - bin/mongodump

您还可以选择配置终端应用程序的安全策略,这样就不需要签名:
(在 macOS Sonoma 中) 系统设置 > 隐私与安全 > 开发者工具

更新依赖

从版本 100.3.1 开始,工具使用 go mod 管理依赖。所有依赖都列在 go.mod 文件中,并直接存放在 vendor 目录中。

要对依赖进行更改,您首先需要修改 go.mod 文件。您可以手动编辑该文件以添加/更新/删除条目,或者在仓库目录中运行以下命令:

1
2
go mod edit -require=<package>@<version>  # 用于添加或更新依赖
go mod edit -droprequire=<package> # 用于删除依赖

然后运行 go mod vendor -v 来重建 vendor 目录以匹配更改后的 go.mod 文件。

可选地,运行 go mod tidy -v 以确保 go.mod 文件与 mongo-tools 源代码匹配。

贡献

请参阅我们的贡献者指南

文档

请参阅 MongoDB 包的文档

对于旧版本 MongoDB 的文档,请参考该版本的 MongoDB 服务器手册

添加新平台支持

请参阅我们的添加新平台支持指南

将更改引入服务器仓库

请参阅我们的将更改引入服务器仓库

Mongoose 中,Schema 用于定义 MongoDB 文档的结构,支持多种数据类型。


1. 基本数据类型

类型 说明 示例
String 字符串 name: { type: String }
Number 数字(整数或浮点数) age: { type: Number }
Boolean 布尔值 isActive: { type: Boolean }
Date 日期 createdAt: { type: Date }
Buffer 二进制数据(如文件) file: { type: Buffer }
ObjectId MongoDB 的 _id 字段 userId: { type: mongoose.Schema.Types.ObjectId }
Array 数组 tags: [String]
Mixed 任意类型(无类型检查) metadata: { type: mongoose.Schema.Types.Mixed }

2. 特殊类型

类型 说明 示例
Decimal128 高精度浮点数 price: { type: mongoose.Schema.Types.Decimal128 }
Map 键值对(ES6 Map attributes: { type: Map, of: String }
Schema.Types.ObjectId 引用其他文档 author: { type: Schema.Types.ObjectId, ref: 'User' }

3. 嵌套 Schema

可以定义嵌套的子文档结构:

1
2
3
4
5
6
7
8
9
10
const addressSchema = new mongoose.Schema({
street: String,
city: String,
country: String,
})

const userSchema = new mongoose.Schema({
name: String,
address: addressSchema, // 嵌套 Schema
})

4. 数组类型

可以定义数组,并指定数组元素的类型:

1
2
3
4
5
const postSchema = new mongoose.Schema({
title: String,
tags: [String], // 字符串数组
comments: [{ body: String, date: Date }], // 对象数组
})

5. 自定义验证

可以添加验证规则:

1
2
3
4
5
6
7
8
9
10
11
12
13
const userSchema = new mongoose.Schema({
email: {
type: String,
required: true,
unique: true,
match: /^\S+@\S+\.\S+$/, // 正则验证
},
age: {
type: Number,
min: 18,
max: 100,
},
})

6. 默认值和自动生成

可以设置默认值或自动生成字段:

1
2
3
4
5
const postSchema = new mongoose.Schema({
title: String,
views: { type: Number, default: 0 },
createdAt: { type: Date, default: Date.now },
})

总结

Mongoose 提供了丰富的字段类型,包括:
基本类型String, Number, Boolean, Date, Buffer, Array, ObjectId, Mixed
特殊类型Decimal128, Map
嵌套 Schema数组类型
自定义验证required, min, max, match
默认值自动生成字段

服务端渲染 Server side rendering

工作原理:
每次页面请求时,Next.js 在服务器端实时生成完整的 HTML,发送给客户端。

1
2
3
4
5
6
7
8
9
export async function getServerSideProps(context) {
const res = await fetch("https://api.example.com/data")
const data = await res.json()
return { props: { data } } // 传递给页面组件
}

export default function pages({ data }) {
return <div>{data.title}</div>
}

静态生成 Static site rendering

客户端渲染 Client side rendering

Incremental Static Regeneration (ISR)

0%