当前位置: 首页 > article >正文

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
        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集合:
        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})
      • 创建一个唯一索引(确保集合中该字段的值是唯一的):
        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集合的统计信息。

http://www.kler.cn/news/355630.html

相关文章:

  • OpenAI重磅发布GPT-4O-Audio-Preview 语音也能“读懂”情绪!
  • 重塑企业数字化未来:物联网与微服务架构的战略性深度融合
  • 【设计一个恒流转恒压用于电池充电管理】2022-01-25
  • 判断推理学习
  • React Native 项目中使用 Expo Application Services (EAS) 进行多渠道打包
  • 分享一套SpringBoot+Vue民宿(预约)系统
  • Python画笔案例-087 绘制 旋转的文字
  • 人脸识别系统-特征算法
  • C++ 数组、递归两种方式实现二分查找
  • YOLOv8/YOLOv11使用web界面推理自己的模型,Gradio框架快速搭建
  • C++ 递归函数之分解质因子
  • Neuromnia是一家创新的AI平台用Llama为自闭症护理领域带来全新解决方案
  • 机器学习—基于随机森林的贷款可能性预测系统实现
  • 将 Ubuntu 系统中的 **swap** 空间从 2GB 扩展到 16GB
  • linux搭建elasticsearch
  • 分布式环境下验证码登录的技术实现
  • 2021-04-14 proteus中仿真时74HC245三态双向端口扩展输出
  • Java集合(3:Set和Map)
  • 拯救大兵瑞恩——状态压缩 + 复合BFS + 动态规划 + 坐标压缩
  • VulnHub-DC-1靶机