MongoDB 使用 MongoDB 查询语言(MongoDB Query Language, MQL) ,它是基于 JSON 样式的文档和 BSON 数据结构的查询语言。MongoDB 的语法与传统的 SQL 不同,它基于 文档模型,而 SQL 基于关系模型,因此查询和操作 MongoDB 数据的方式也有所不同。
前提、操作符
1、比较操作符
-
$eq
:等于 -
$ne
:不等于 -
$gt
:大于 -
$lt
:小于 -
$gte
:大于等于 -
$lte
:小于等于db.myCollection.find({ age: { $gt: 30 } }) // 查询 age 大于 30 的文档
2、逻辑操作符
-
$and
:与操作 -
$or
:或操作 -
$nor
:非操作 -
$not
:否定操作db.myCollection.find({
$or: [{ age: { $gt: 30 } }, { status: "active" }]
})
3、结合操作符
-
$in
:匹配数组中的值 -
$nin
:不匹配数组中的值 -
$exists
:检查字段是否存在db.myCollection.find({ age: { $in: [25, 30, 35] } })
4、字符串操作
-
$regex
:正则表达式查询 -
$options
:正则表达式的选项(例如,"i"
表示不区分大小写)db.myCollection.find({ name: { $regex: "^John", $options: "i" } })
5、数值操作
-
$size
:匹配数组的大小 -
$all
:匹配数组中的所有元素 -
$elemMatch
:匹配数组中的元素db.myCollection.find({ tags: { $size: 3 } }) // 查找 tags 数组长度为 3 的文档
一、连接到mongo
使用 MongoDB Shell,连接到远程 MongoDB 实例:
mongo --host <host> --port <port> -u <username> -p <password>
二、基本数据库操作
1、查看所有数据库
show databases
2、创建数据库
在 MongoDB 中,数据库是 惰性创建 的,即在插入数据时数据库会自动创建。
use myDatabase
3、切换到指定数据库
use <databaseName>
4、查看当前数据库
db
5、删除数据库
db.dropDatabase()
三、集合操作
1、查看当前数据库的所有集合
show collections
2、创建集合
MongoDB 会在插入数据时自动创建集合,但你也可以手动创建集合:
db.createCollection("myCollection")
3、删除集合
db.myCollection.drop()
四、文档增删查操作
1、插入单个文档
db.myCollection.insertOne({
name: "John Doe",
age: 30,
status: "active"
})
2、插入多个文档
db.myCollection.insertMany([
{ name: "Alice", age: 28, status: "inactive" },
{ name: "Bob", age: 35, status: "active" }
])
3、更新单个文档
db.myCollection.updateOne(
{ name: "John Doe" }, // 查找条件
{ $set: { age: 31 } } // 更新操作
)
4、更新多个文档
db.myCollection.updateMany(
{ status: "active" },
{ $set: { status: "inactive" } }
)
5、删除单个文档
db.myCollection.deleteOne({ name: "John Doe" })
db.myCollection.deleteMany({ age: { $lt: 30 } })
五、文档查询操作
1、查询所有文档
db.myCollection.find()
2、查询匹配条件的文档
db.myCollection.find({ name: "John Doe" })
3、查询特定字段的文档
db.myCollection.find({ age: 30 }, { name: 1, age: 1 }) // 返回 name 和 age 字段
4、查询条件与逻辑运算
db.myCollection.find({ age: { $gt: 25 } }) // 查询 age > 25 的文档
5、聚合操作
MongoDB 使用 聚合管道 来执行复杂的查询和数据处理操作。聚合管道是按顺序连接的多个阶段,每个阶段处理数据并将结果传递给下一个阶段。
聚合操作符:
$match
:筛选文档,类似于find
查询。$group
:分组操作,可以计算总和、平均数、最大值等。$sort
:对结果排序。$project
:选择要显示的字段或添加新字段。$limit
:限制返回的文档数量。$skip
:跳过指定数量的文档。
demo:
db.myCollection.aggregate([
{ $match: { status: "active" } }, // 第一个阶段:筛选 status 为 active 的文档
{ $group: { _id: "$age", total: { $sum: 1 } } } // 第二个阶段:按年龄分组,统计每个年龄的总数
])
db.myCollection.aggregate([
{ $match: { status: "active" } },
{ $group: { _id: "$age", total: { $sum: 1 } } },
{ $sort: { total: -1 } }, // 按 total 字段降序排序
{ $limit: 5 } // 返回前 5 条结果
])
六、索引操作
1、创建索引
(1)创建单字段索引
db.myCollection.createIndex({ age: 1 }) // 升序索引
(2)创建复合索引
db.myCollection.createIndex({ name: 1, age: -1 }) // name 升序,age 降序
2、查看索引
db.myCollection.getIndexes()
3、删除索引
db.myCollection.dropIndex("indexName")
七、事务操作
MongoDB 4.x 引入了对多文档事务的支持。事务允许在多个操作之间保持原子性。
const session = db.getMongo().startSession();
session.startTransaction();
try {
db.myCollection.insertOne({ name: "John Doe" }, { session });
db.myCollection.updateOne({ name: "Alice" }, { $set: { status: "active" } }, { session });
session.commitTransaction(); // 提交事务
} catch (error) {
session.abortTransaction(); // 事务回滚
throw error;
} finally {
session.endSession(); // 结束会话
}
以上介绍的只是 MongoDB 语法的基础和常见操作,MongoDB 还提供了更多的高级功能,如全文索引、地理空间查询、数据导入导出等,开发者可以根据项目需求深入学习和使用。