MongoDB集合(Collection)的详细使用说明

以下是关于MongoDB集合(Collection)的详细使用说明:

1. 集合的概念

  • 集合是MongoDB中存储文档的容器,类似于关系型数据库中的表。它是数据库中的一个逻辑分组,用于组织和管理相关的文档。一个数据库可以包含多个集合,每个集合可以包含零个或多个文档。集合中的文档可以具有不同的结构,即它们可以包含不同的字段和数据类型,但都遵循MongoDB的文档格式规范(BSON格式)。

2. 集合的创建

  • 自动创建
    • 当向一个不存在的集合中插入文档时,MongoDB会自动创建该集合。例如:
      • 首先切换到一个数据库(假设数据库名为mydb):use mydb
      • 然后向一个不存在的集合(假设集合名为mycollection)中插入一条文档:db.mycollection.insert({"name":"John","age":30})
      • 此时,mycollection集合就会被自动创建。
  • 手动创建
    • 也可以使用db.createCollection()方法手动创建集合。语法如下:db.createCollection("collection_name", options)
    • 其中collection_name是要创建的集合名称,options是一个可选的配置对象,用于指定集合的一些属性。例如:
      • 创建一个名为logs的普通集合:db.createCollection("logs")

      • 创建一个固定大小的集合(也称为固定集合或 capped collection),并指定其最大字节数为1024 * 1024(1MB),最大文档数量为1000

        javascript 复制代码
        db.createCollection("mycappedcollection", {
          capped: true,
          size: 1024 * 1024,
          max: 1000
        });

3. 集合的查询

  • 可以使用show collectionsshow tables命令来查询当前数据库中的所有集合。例如,在切换到mydb数据库后,执行show collections命令,会列出mydb数据库中的所有集合。

4. 集合的重命名

  • 可以使用db.collection.renameCollection("new_name")方法来重命名集合。例如,将mycollection集合重命名为newcollectiondb.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集合:

        javascript 复制代码
        var 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集合中nameBob的文档的age更新为36db.mycollection.updateOne({"name": "Bob"}, {"$set": {"age": 36}})
      • 更新符合条件的所有文档:db.collection.updateMany(query, update)。例如,将mycollection集合中age大于30的文档的age都更新为31db.mycollection.updateMany({"age": {$gt: 30}}, {"$set": {"age": 31}})
  • 删除文档

    • 使用db.collection.remove()方法来删除集合中的文档。有以下几种情况:
      • 删除符合条件的第一条文档:db.collection.remove(query, {justOne: true})。例如,删除mycollection集合中nameBob的文档(只删除第一个匹配的):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集合中nameBob的文档(只删除第一个匹配的):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})

      • 创建一个唯一索引(确保集合中该字段的值是唯一的):

        javascript 复制代码
        db.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集合的统计信息。
相关推荐
Leo.yuan25 分钟前
数据量大Excel卡顿严重?选对报表工具提高10倍效率
数据库·数据分析·数据可视化·powerbi
Runing_WoNiu33 分钟前
MySQL与Oracle对比及区别
数据库·mysql·oracle
天道有情战天下1 小时前
mysql锁机制详解
数据库·mysql
看山还是山,看水还是。1 小时前
Redis 配置
运维·数据库·redis·安全·缓存·测试覆盖率
谷新龙0011 小时前
Redis运行时的10大重要指标
数据库·redis·缓存
CodingBrother1 小时前
MySQL 中单列索引与联合索引分析
数据库·mysql
精进攻城狮@1 小时前
Redis缓存雪崩、缓存击穿、缓存穿透
数据库·redis·缓存
小酋仍在学习1 小时前
光驱验证 MD5 校验和
数据库·postgresql
keep__go1 小时前
Linux 批量配置互信
linux·运维·服务器·数据库·shell
小王同学mf2 小时前
怎么尽可能保证 Kafka 的可靠性
数据库