MongoDB是当下非常流行的NoSQL数据库,和传统的关系型数据库不同,它采用文档型存储结构,不需要提前定义固定的表结构,非常适合处理半结构化或者快速迭代的业务场景。很多新手刚接触时会觉得和MySQL等数据库差异很大,其实只要理清核心逻辑,入门并不难。

一、MongoDB核心概念对比
很多新手习惯用关系型数据库的思维理解MongoDB,我们可以先通过对比快速建立认知:
| 关系型数据库 | MongoDB | 说明 |
|---|---|---|
| 数据库(Database) | 数据库(Database) | 两者的概念基本一致,都是最高层级的存储容器 |
| 表(Table) | 集合(Collection) | MongoDB的集合不需要提前定义结构,同一个集合可以存不同结构的文档 |
| 行(Row) | 文档(Document) | MongoDB的文档是BSON格式,类似JSON,支持嵌套和数组结构 |
| 列(Column) | 字段(Field) | 文档中的键值对,每个文档可以有完全不同的字段 |
二、基础CRUD操作演示
MongoDB的CRUD操作和关系型数据库逻辑类似,只是语法有差异,下面用Node.js的官方驱动演示基础用法:
1. 连接数据库并插入文档
const { MongoClient } = require('mongodb');
// 连接地址,本地默认端口27017
const url = 'mongodb://127.0.0.1:27017';
const client = new MongoClient(url);
async function insertDemo() {
try {
await client.connect();
// 选择数据库,不存在会自动创建
const db = client.db('test_db');
// 选择集合,不存在会自动创建
const collection = db.collection('user_collection');
// 插入单个文档,文档是普通JS对象
const insertResult = await collection.insertOne({
name: '张三',
age: 25,
hobbies: ['篮球', '编程'],
address: {
city: '北京',
district: '海淀区'
}
});
console.log('插入成功,文档id:', insertResult.insertedId);
} finally {
await client.close();
}
}
insertDemo().catch(console.error);2. 查询文档
查询支持多种条件,比如精确匹配、范围查询、嵌套字段查询等:
async function queryDemo() {
try {
await client.connect();
const db = client.db('test_db');
const collection = db.collection('user_collection');
// 查询年龄大于20的用户,返回所有匹配的文档
const users = await collection.find({ age: { $gt: 20 } }).toArray();
console.log('查询结果:', users);
// 查询嵌套字段,地址在城市为北京的用户
const beijingUsers = await collection.find({ 'address.city': '北京' }).toArray();
console.log('北京的用户:', beijingUsers);
} finally {
await client.close();
}
}3. 更新和删除文档
async function updateDeleteDemo() {
try {
await client.connect();
const db = client.db('test_db');
const collection = db.collection('user_collection');
// 更新单个文档,给张三增加手机号字段
const updateResult = await collection.updateOne(
{ name: '张三' }, // 查询条件
{ $set: { phone: '13800138000' } } // 更新操作
);
console.log('更新结果,匹配数量:', updateResult.matchedCount, '修改数量:', updateResult.modifiedCount);
// 删除年龄小于20的文档
const deleteResult = await collection.deleteMany({ age: { $lt: 20 } });
console.log('删除数量:', deleteResult.deletedCount);
} finally {
await client.close();
}
}三、新手入门实用技巧
- 不需要提前创建数据库和集合,第一次插入数据时会自动生成,但是建议正式环境提前规划好集合结构
- 文档的主键
_id是MongoDB自动生成的,默认是ObjectId类型,也可以自定义主键字段 - 查询时如果数据量很大,建议搭配索引使用,否则全表扫描会影响性能
- 常用的操作符比如
$gt(大于)、$lt(小于)、$in(包含)、$set(设置字段)可以整理成小抄方便查阅
四、简单索引入门
索引可以大幅提升查询效率,给常用查询字段创建索引是基础优化手段:
async function indexDemo() {
try {
await client.connect();
const db = client.db('test_db');
const collection = db.collection('user_collection');
// 给name字段创建普通索引,1表示升序,-1表示降序
await collection.createIndex({ name: 1 });
// 查看集合的所有索引
const indexes = await collection.indexes();
console.log('当前索引:', indexes);
} finally {
await client.close();
}
}以上就是MongoDB初学阶段需要掌握的核心内容,后续可以逐步学习聚合管道、事务、副本集等进阶功能,多动手写代码实践会比单纯看文档效果好很多。