MongoDB 基础

发布时间 2023-12-30 11:06:09作者: 捷后愚生

MongoDB 是一个高性能、开源、面向文档的数据库,设计用于存储大量的数据。它使用类似于 JSON 的 BSON 格式来存储数据,这使得数据结构更加灵活,可以存储复杂的类型,如数组和嵌套文档。

基本概念

  1. 文档 (Document):MongoDB 的数据结构是基于文档的,一个文档是一个键值对的集合,类似于 JSON 对象。每个文档都有一个唯一的标识符,称为 _id 字段。
  2. 集合 (Collection):集合是 MongoDB 中存储文档的容器。一个集合可以包含多个文档,这些文档具有相似的结构。
  3. 数据库 (Database):数据库是 MongoDB 中存储集合的容器。一个数据库可以包含多个集合。

增删改查语句

  1. 查询 (Query)

    • 查询一个集合中的所有文档:db.collectionName.find()
    • 查询满足特定条件的文档:db.collectionName.find({ field: value })
    • 使用查询操作符:db.collectionName.find({ field: { $operator: value } })
  2. 插入 (Insert)

    • 插入一个新文档:db.collectionName.insert({ field1: value1, field2: value2 })
    • 插入多个新文档:db.collectionName.insert([{...}, {...}])
  3. 更新 (Update)

    • 更新一个文档:db.collectionName.update({ _id: ObjectId("...") }, { $set: { field1: value1 } })
    • 使用更新操作符:db.collectionName.update({ _id: ObjectId("...") }, { $operator: value })
  4. 删除 (Delete)

    • 删除一个文档:db.collectionName.remove({ _id: ObjectId("...") })db.collectionName.deleteOne({ _id: ObjectId("...") })
    • 删除多个文档:db.collectionName.remove({ field: value })db.collectionName.deleteMany({ field: value })
  5. 聚合 (Aggregation)

    • 聚合管道操作符用于处理数据并返回结果。例如,$group, $match, $sort 等。
  6. 索引 (Index)

    • 在 MongoDB 中,索引用于提高查询性能。通过创建索引,MongoDB 可以快速定位到特定的数据。常见的索引类型有单字段索引、复合索引等。
  7. 聚合管道

    • MongoDB 的聚合框架允许你执行复杂的分析操作,如分组、过滤、排序和转换数据。
  8. 地理空间查询

    • MongoDB 支持地理空间查询,允许你基于地理位置检索数据。例如,使用 $near, $within, 和 $geoIntersects 等操作符。
  9. 文本搜索

    • MongoDB 的文本搜索功能允许你在集合中执行全文搜索。你可以使用 $text 操作符来执行文本搜索查询。
  10. 连接 (Joins)

  • MongoDB 支持跨集合的连接操作,允许你结合来自不同集合的数据。这通常通过使用聚合管道来完成。
  1. 存储过程
  • MongoDB 也支持存储过程,允许你编写一段代码并在数据库中保存它,以便以后可以调用它来执行特定的操作。
  1. 安全性和认证
  • MongoDB 支持用户认证和访问控制,确保只有经过授权的用户才能访问数据库中的数据。你可以设置用户角色和权限来控制对数据的访问。
  1. 复制和分片
  • MongoDB 支持复制集和分片,以提供高可用性和可扩展性。复制集允许多个节点保持数据副本,而分片则允许将数据分布到多个节点上以提高性能和容量。
  1. 监控和日志记录
  • MongoDB 提供各种监控工具和日志记录功能,帮助你跟踪数据库的性能和活动,以便及时发现和解决问题。
  1. 使用 Cursors
  • MongoDB 使用游标来遍历查询结果。游标提供了一种迭代遍历查询结果的方法,并允许你执行各种操作,如投影、排序和限制返回的文档数量。
  1. 更新文档版本
  • MongoDB 支持文档版本控制,通过 $set$setOnInsert 操作符来更新或插入文档时可以指定版本号。如果版本号不匹配,更新将被拒绝。这有助于实现乐观锁机制。