掌握MongoDB收藏
#初学者 #编程 #database #mongodb

mongoDB将您的数据存储在集合中 - 允许您有效组织和查询数据的文档组。

获得收藏品是利用MongoDB的全部力量的关键。该深度指南将涵盖您需要了解的所有内容。

为什么要收藏?

假设您正在建立一个申请,以跟踪大学的课程和学生。您可以将数据存储在两个集合中-coursesstudents

courses集合中的一些示例文档:

{
  "name": "Data Structures",
  "dept": "Computer Science",
  "credits": 3  
}

{
  "name": "Database Systems",
  "dept": "Computer Science", 
  "prereqs": ["Data Structures"],
  "credits": 3
}

students集合中:

{
  "name": "Jane Doe",
  "studentId": "101", 
  "major": "Computer Science",
  "enrollments": ["Data Structures", "Database Systems"]   
}

将相关数据组织到逻辑集合中使查询和管理数据直观。

创建收藏

要创建一个新集合,请使用db.createCollection()方法:

db.createCollection('students')

这将创建一个名为“学生”的空集。

命名收藏

  • 收集名称不能以system.开头 - 这是保留的。

  • 避免使用名称中的$字符。

除此之外,在MongoDB中没有对收集名称的具体限制。但是一些好的做法适用:

  • 使用有意义的,域驱动的名称,例如usersproducts等。

  • 使用骆驼或pascalcase,避免下划线或连字符。

  • 保持名称简短但描述性。

  • 使用复数名词作为文档的名称和单数形式。

清单集

使用show collections查看现有收藏:

> show collections
courses
students

您还可以查询system.namespaces Collection以列出用户定义的集合。

放下收藏

要删除包含所有文档的整个集合,请使用drop()方法:

db.logs.drop()

如果不存在该集合,则MongoDB会丢下错误。

收集方法

一些有用的收集方法和操作:

  • db.collection.find()-集合中查询文档

  • db.collection.insertOne()-插入一个文档

  • db.collection.insertMany()-插入多个文档

  • db.collection.updateOne()-更新一个文档

  • db.collection.updateMany()-更新多个文档

  • db.collection.deleteOne()-删除一个文档

  • db.collection.deleteMany()-删除多个文档

  • db.collection.createIndex()-在字段上创建索引

  • db.collection.drop()-删除/删除集合

和更多!

要深入了解它们,请阅读我的博客-Learn MongoDB in One Shot - Ultimate MongoDB Guide

封顶收藏

上限收集的尺寸固定 - 它们达到配置的尺寸后停止生长。较旧的文档老化并按FIFO顺序覆盖。

他们为诸如日志之类的用例提供了高性能:

db.createCollection('logs', {capped: true, size: 10000})

上限收集会自动维护插入顺序,不需要索引。

您可以传递选项以在创建上配置上限集合:

  • 上限 - 布尔值,以指定集合是否被封顶。上限收藏的尺寸固定。

  • size - 字节中盖收藏的最大尺寸。

  • 最大 - 封顶集合的最大文档数量

db.createCollection('logs', {
  capped: true, 
  size: 10000,
  max: 100
})

这将收藏夹限制为10KB和100个文档。较旧的文档会自动使其适合日志数据。

注意:

即使您指定max文档数量,size参数也是始终所必需的。 MongoDB如果收集到达到最大文档计数之前的最大尺寸限制,则删除旧文档。

收集验证

您可以在插入和更新过程中定义JSON模式以验证文档:

收集架构验证对于您对如何组织数据有很好的了解的已建立应用程序最有用。您可以在以下情况下使用模式验证:

  • 对于用户收集,请确保password字段仅存储为字符串。此验证可防止用户将密码保存为出乎意料的数据类型,例如图像。

  • 对于销售收集,请确保item字段属于您商店出售的商品列表。此验证可防止用户在输入销售数据时意外拼写项目名称。

  • 对于学生收集,请确保gpa字段始终是一个正数。此验证在数据输入期间捕获错别字。

当MongoDB检查验证

当您创建一个具有模式验证的新集合时,MongoDB在更新过程中检查验证并插入该集合中的验证。

当您将验证添加到现有的非空收藏时:

  • 检查了新插入的文档以进行验证。

  • 在您的集合中已经存在的文档,直到修改后才检查验证。

const studentSchema = {
  validator: {
    $jsonSchema: {
      bsonType: 'object',
      required: ['name', 'studentId'],
      properties: {
        name: {
          bsonType: 'string' 
        },
        studentId: {
          bsonType: 'string',
          minLength: 5
        },
        gpa: {
          bsonType: 'number',
          minimum: 0,
          maximum: 4 
        }
      }
    }
  }
}

db.createCollection('students', studentSchema)

xxxxxxxxxxxxxxxxxxxxxxxxx OR xxxxxxxxxxxxxxxxxxxxxxxxxxx

db.createCollection('users', {
  validator: {
    $jsonSchema: {
          bsonType: 'object',
          required: ['name', 'studentId'],
          properties: {
            name: {
              bsonType: 'string' 
            },
            studentId: {
              bsonType: 'string',
              minLength: 5
            },
            gpa: {
              bsonType: 'number',
              minimum: 0,
              maximum: 4 
            }
          }
        }
      } // Document validator
    })

这将执行:

  • namestudentId是字符串字段

  • studentId必须至少5个字符

  • gpa必须是0-4

  • 之间的数字

验证允许将数据一致性作为应用程序和数据量量表。

其他选项(例如validationAction)允许在无效文档上配置是否错误或警告。

db.createCollection('users', {
  validator: {...}, // Document validator
  validationLevel: 'strict', // Validation mode
  validationAction: 'warn' // Action on validation failure  
})

validationAction确定文档失败验证时会发生什么:

  • 错误 - 插入/更新将失败,并且将丢弃错误。这是默认的。

  • 警告 - 操作将成功,但会记录警告。

默认情况下 mongoDB拒绝操作,并且不会将文档写入集合Check Out this to know more.

设置验证规则可确保随着应用程序量表的一致性。

自动索引

默认情况下,MongoDB自动在创建集合时在_id字段上创建索引。

例如:

db.students.getIndexes()
[
  {
    "v" : 2,
    "key" : { "_id" : 1 },  
    "name" : "_id_" 
  }
]

_id索引通过主键提供有效的查找。但是索引有开销,因此可能会禁用以下用例:

  • 大量加载数据,其中需要高写入速度

  • 不需要索引的原型

您可以在_id上禁用自动索引:

db.createCollection('data', {autoIndexId: false})

以后,您可以根据需要手动创建索引。

结局注:)

收集是MongoDB的核心组成部分。掌握集合使您可以有效地组织,管理和查询MongoDB数据。

有了这个基础,您现在可以牢固地了解如何与MongoDB收藏一起工作。

要了解更多信息,我建议您阅读MongoDB官方文档,它提供了大量资源来继续提高您的MongoDB技能。活跃的社区使世界各地的MongoDB专家都能学习。

我还建议查看我的其他博客文章(0xupdate它也在pfficial mongodb新闻通讯中介绍) - Learn MongoDB in One Shot-以获取MongoDB基础知识的全面初学者指南

我希望您喜欢对MongoDB系列的深入探索。在评论中让E知道您要接下来要涵盖哪些主题!