以下是MongoDB中一些数据库相关的关键字说明:
1. 数据库(Database)
- 概念
- 数据库是MongoDB中数据存储的最高层级容器,类似于关系型数据库中的数据库概念。一个MongoDB服务器实例可以包含多个数据库,每个数据库可以有自己独立的集合和文档。
- 操作相关关键字
use
:用于切换到指定的数据库,如果数据库不存在则创建该数据库。例如:use mydb
会切换到mydb
数据库,如果mydb
不存在则创建它。show dbs
或show databases
:用于显示当前MongoDB服务器实例中所有的数据库列表。但需要注意的是,它只会显示有数据的数据库(即数据库中至少有一个集合包含文档)或者已经分配了一定磁盘空间的数据库。
2. 集合(Collection)
- 概念
- 集合是MongoDB中一组文档的容器,类似于关系型数据库中的表。一个数据库可以包含多个集合,集合中的文档可以有不同的结构(即字段可以不同,但都符合MongoDB的文档格式要求)。
- 操作相关关键字
db.createCollection("collection_name")
:用于在当前数据库中手动创建一个名为collection_name
的集合。例如:db.createCollection("users")
会创建一个名为users
的集合。需要注意的是,如果向一个不存在的集合中插入文档时,MongoDB会自动创建该集合,所以手动创建集合不是必需的操作。show collections
或show tables
:用于显示当前数据库中所有的集合列表。例如,在切换到mydb
数据库后,执行show collections
会显示mydb
数据库中的所有集合。db.collection_name.drop()
:用于删除当前数据库中名为collection_name
的集合。例如:db.users.drop()
会删除users
集合。
3. 文档(Document)
- 概念
- 文档是MongoDB中数据的基本单元,它是一个类似于JSON格式的键值对数据结构,也被称为BSON(Binary JSON)格式。文档可以包含不同类型的数据字段,并且可以嵌套其他文档或数组。
- 操作相关关键字
db.collection_name.insert(document)
:用于向collection_name
集合中插入一个文档。例如:db.users.insert({"name":"John","age":30})
会向users
集合中插入一个包含name
和age
字段的文档。这里的文档格式是一个JSON风格的对象,其中键是字段名,值是对应的数据。db.collection_name.find()
:用于查询collection_name
集合中的所有文档。例如:db.users.find()
会返回users
集合中的所有文档。可以使用查询条件来筛选特定的文档,例如:db.users.find({"age":30})
会返回users
集合中age
为30的文档。db.collection_name.update(query, update)
:用于更新collection_name
集合中符合query
条件的文档。例如:db.users.update({"age":30},{"$set":{"age":31}})
会将users
集合中age
为30的文档的age
字段更新为31。这里的$set
是一个更新操作符,用于指定要更新的字段和值。db.collection_name.remove(query)
:用于删除collection_name
集合中符合query
条件的文档。例如:db.users.remove({"age":30})
会删除users
集合中age
为30的文档。
4. 索引(Index)
- 概念
- 索引是一种数据结构,用于提高数据查询的效率。在MongoDB中,索引可以基于文档中的一个或多个字段创建,类似于关系型数据库中的索引。通过创建索引,可以加快对文档的查找、排序和分组操作。
- 操作相关关键字
db.collection_name.ensureIndex({field: direction})
:用于在collection_name
集合中基于field
字段创建一个索引,direction
可以是1(表示升序)或 -1(表示降序)。例如:db.users.ensureIndex({"name":1})
会在users
集合中基于name
字段创建一个升序索引。创建索引可以提高对name
字段的查询效率,例如在执行db.users.find({"name":"John"})
查询时,如果有name
索引,查询速度会更快。db.collection_name.getIndexes()
:用于获取collection_name
集合中所有的索引列表。例如:db.users.getIndexes()
会返回users
集合中所有的索引信息,包括索引名称、基于的字段、排序方向等。db.collection_name.dropIndex("index_name")
:用于删除collection_name
集合中名为index_name
的索引。例如:db.users.dropIndex("name_1")
会删除users
集合中基于name
字段创建的名为name_1
的索引。
5. 聚合(Aggregation)
- 概念
- 聚合是一种对数据进行处理和分析的操作,用于从多个文档中提取信息、进行计算和分组等。在MongoDB中,聚合操作是通过聚合管道(Aggregation Pipeline)来实现的,聚合管道是一系列的阶段(Stage)组成,每个阶段对输入的数据进行一种特定的操作,然后将结果传递给下一个阶段。
- 操作相关关键字
db.collection_name.aggregate(pipeline)
:用于在collection_name
集合中执行聚合操作,pipeline
是一个包含聚合阶段的数组。例如:db.users.aggregate([{"$match":{"age":30}},{"$group":{"_id":"$gender","count":{"$sum":1}}}])
会先筛选出age
为30的文档,然后根据gender
字段进行分组,并计算每组的数量。这里的$match
和$group
是聚合管道中的两个常见阶段,$match
用于筛选数据,$group
用于分组数据。$sum
、$avg
、$max
、$min
、$push
、$addToSet
、$first
、$last
等 :这些是聚合管道中常用的操作符,用于进行求和、求平均、求最大值、求最小值、将值推送到数组、将值添加到不重复数组、获取第一个文档的值、获取最后一个文档的值等操作。例如,在上述聚合操作中,$sum
用于计算每组的数量。
6. 用户和权限(User and Permission)
- 概念
- MongoDB支持用户认证和权限管理,用户可以被赋予不同的角色和权限,以控制对数据库、集合和文档的访问。
- 操作相关关键字
use admin
:用于切换到admin
数据库,admin
数据库是用于管理用户和权限的核心数据库。在创建用户、授予权限等操作时,通常需要先切换到admin
数据库。db.createUser(user_document)
:用于在当前数据库(通常是admin
数据库)中创建一个用户。user_document
是一个包含用户信息的文档,包括用户名、密码、角色等。例如:db.createUser({"user":"john","pwd":"123456","roles":[{"role":"readWrite","db":"mydb"}]})
会创建一个名为john
的用户,密码为123456
,并赋予其对mydb
数据库的读写权限。db.auth(user_name, password)
:用于对用户进行认证,验证用户提供的用户名和密码是否正确。例如:db.auth("john","123456")
会验证john
用户的密码是否正确。如果认证成功,用户就可以根据其被赋予的权限访问相应的数据库、集合和文档。db.grantRolesToUser(user_name, roles)
:用于向用户授予角色。roles
是一个包含角色信息的数组。例如:db.grantRolesToUser("john",[{"role":"readOnly","db":"mydb"}])
会向john
用户授予对mydb
数据库的只读权限。db.revokeRolesFromUser(user_name, roles)
:用于从用户那里收回角色。例如:db.revokeRolesFromUser("john",[{"role":"readOnly","db":"mydb"}])
会从john
用户那里收回对mydb
数据库的只读权限。