以下是关于MongoDB集合(Collection)的详细使用说明:
1. 集合的概念
- 集合是MongoDB中存储文档的容器,类似于关系型数据库中的表。它是数据库中的一个逻辑分组,用于组织和管理相关的文档。一个数据库可以包含多个集合,每个集合可以包含零个或多个文档。集合中的文档可以具有不同的结构,即它们可以包含不同的字段和数据类型,但都遵循MongoDB的文档格式规范(BSON格式)。
2. 集合的创建
- 自动创建
- 当向一个不存在的集合中插入文档时,MongoDB会自动创建该集合。例如:
- 首先切换到一个数据库(假设数据库名为
mydb
):use mydb
- 然后向一个不存在的集合(假设集合名为
mycollection
)中插入一条文档:db.mycollection.insert({"name":"John","age":30})
- 此时,
mycollection
集合就会被自动创建。
- 首先切换到一个数据库(假设数据库名为
- 当向一个不存在的集合中插入文档时,MongoDB会自动创建该集合。例如:
- 手动创建
- 也可以使用
db.createCollection()
方法手动创建集合。语法如下:db.createCollection("collection_name", options)
- 其中
collection_name
是要创建的集合名称,options
是一个可选的配置对象,用于指定集合的一些属性。例如:-
创建一个名为
logs
的普通集合:db.createCollection("logs")
-
创建一个固定大小的集合(也称为固定集合或 capped collection),并指定其最大字节数为
1024 * 1024
(1MB),最大文档数量为1000
:javascriptdb.createCollection("mycappedcollection", { capped: true, size: 1024 * 1024, max: 1000 });
-
- 也可以使用
3. 集合的查询
- 可以使用
show collections
或show tables
命令来查询当前数据库中的所有集合。例如,在切换到mydb
数据库后,执行show collections
命令,会列出mydb
数据库中的所有集合。
4. 集合的重命名
- 可以使用
db.collection.renameCollection("new_name")
方法来重命名集合。例如,将mycollection
集合重命名为newcollection
:db.mycollection.renameCollection("newcollection")
5. 集合的删除
- 使用
db.collection.drop()
方法来删除集合。例如,删除mycollection
集合:db.mycollection.drop()
6. 集合的文档操作
-
插入文档
- 可以使用
db.collection.insert()
或db.collection.insertOne()
(插入单个文档)和db.collection.insertMany()
(插入多个文档)方法向集合中插入文档。例如:-
插入单个文档到
mycollection
集合:db.mycollection.insertOne({"name":"Alice","age":25})
-
插入多个文档到
mycollection
集合:javascriptvar documents = [ {"name":"Bob","age":35}, {"name":"Carol","age":40} ]; db.mycollection.insertMany(documents);
-
- 可以使用
-
查询文档
- 使用
db.collection.find()
方法来查询集合中的文档。可以添加查询条件来筛选特定的文档。例如:- 查询
mycollection
集合中的所有文档:db.mycollection.find()
- 查询
mycollection
集合中age
大于30
的文档:db.mycollection.find({"age": {$gt: 30}})
- 可以使用
.pretty()
方法来格式化输出查询结果,使文档结构更清晰:db.mycollection.find({"age": {$gt: 30}}).pretty()
- 查询
- 使用
-
更新文档
- 使用
db.collection.update()
方法来更新集合中的文档。有多种更新方式:- 更新符合条件的第一条文档:
db.collection.updateOne(query, update)
。例如,将mycollection
集合中name
为Bob
的文档的age
更新为36
:db.mycollection.updateOne({"name": "Bob"}, {"$set": {"age": 36}})
- 更新符合条件的所有文档:
db.collection.updateMany(query, update)
。例如,将mycollection
集合中age
大于30
的文档的age
都更新为31
:db.mycollection.updateMany({"age": {$gt: 30}}, {"$set": {"age": 31}})
- 更新符合条件的第一条文档:
- 使用
-
删除文档
- 使用
db.collection.remove()
方法来删除集合中的文档。有以下几种情况:- 删除符合条件的第一条文档:
db.collection.remove(query, {justOne: true})
。例如,删除mycollection
集合中name
为Bob
的文档(只删除第一个匹配的):db.mycollection.remove({"name": "Bob"}, {justOne: true})
- 删除符合条件的所有文档:
db.collection.remove(query)
。例如,删除mycollection
集合中age
大于30
的文档:db.mycollection.remove({"name": "Bob"}, {justOne: true})
- 在MongoDB 2.6及以后版本,还可以使用
db.collection.deleteOne()
(删除符合条件的第一条文档)和db.collection.deleteMany()
(删除符合条件的所有文档)方法,它们提供了更明确的操作语义。例如:- 删除
mycollection
集合中name
为Bob
的文档(只删除第一个匹配的):db.mycollection.deleteOne({"name": "Bob"})
- 删除
mycollection
集合中age
大于30
的文档:db.mycollection.deleteMany({"age": {$gt: 30}})
- 删除
- 删除符合条件的第一条文档:
- 使用
7. 集合的索引操作
-
创建索引
- 使用
db.collection.ensureIndex()
方法来创建索引。语法为:db.collection.ensureIndex({field: direction}, options)
- 其中
field
是要创建索引的字段,direction
可以是1
(升序)或-1
(降序),options
是一个可选的配置对象,用于指定索引的一些属性。例如:-
在
mycollection
集合中基于name
字段创建一个升序索引:db.mycollection.ensureIndex({"name": 1})
-
创建一个唯一索引(确保集合中该字段的值是唯一的):
javascriptdb.mycollection.ensureIndex({"email": 1}, {unique: true});
-
- 使用
-
查询索引
- 使用
db.collection.getIndexes()
方法来查询集合中的所有索引。例如:db.mycollection.getIndexes()
会返回mycollection
集合中所有索引的信息,包括索引名称、基于的字段、排序方向等。
- 使用
-
删除索引
- 使用
db.collection.dropIndex()
方法来删除集合中的指定索引。例如:db.mycollection.dropIndex("name_1")
会删除mycollection
集合中基于name
字段创建的名为name_1
的索引。 - 使用
db.collection.dropIndexes()
方法来删除集合中的所有索引。例如:db.mycollection.dropIndexes()
会删除mycollection
所有的索引。
- 使用
8. 集合的统计信息
- 使用
db.collection.stats()
方法来获取集合的统计信息,包括集合中的文档数量、平均文档大小、存储大小、索引数量、索引大小等。例如:db.mycollection.stats()
会返回mycollection
集合的统计信息。