MongoDB基本使用

58 阅读3分钟

1、MongoDB 的适用场景

  • 大数据存储:适合存储大量结构化和半结构化的数据。
  • 实时分析:支持实时数据处理和分析。
  • 内容管理系统:存储动态内容,如博客、新闻网站等。
  • 物联网(IoT) :存储设备数据和传感器数据。
  • 移动应用后端:存储用户数据和应用状态。

2、MongoDB 与其他数据库的对比

  • 与关系型数据库(如 MySQL)对比

    • 结构灵活性:MongoDB 的文档结构更灵活,适合动态数据。
    • 性能:MongoDB 在处理大量数据时通常具有更高的性能。
    • 扩展性:MongoDB 更适合水平扩展,而关系型数据库更适合垂直扩展。
  • 与其他 NoSQL 数据库(如 Cassandra)对比

    • 数据模型:MongoDB 是文档型数据库,而 Cassandra 是列族数据库。
    • 查询语言:MongoDB 的查询语言更丰富,适合复杂的查询操作。
    • 适用场景:MongoDB 更适合需要灵活数据模型的场景,而 Cassandra 更适合高吞吐量的写入场景。

3. MongoDB 的数据组织结构

MongoDB 的数据组织结构包括以下几个层次:

  • 数据库(Database) :一个 MongoDB 实例可以包含多个数据库,每个数据库是一个独立的存储空间。
  • 集合(Collection) :数据库中存储文档的容器,类似于关系型数据库中的表。集合中的文档可以有不同的结构。
  • 文档(Document) :集合中的数据记录,以 BSON(二进制 JSON)格式存储。文档是 MongoDB 的基本数据单位。

4、基本查询

4.1 插入数据

MongoDB 使用 insertOne()insertMany() 方法来插入数据。

  • 插入单条文档

    JavaScript

    复制

    db.collection_name.insertOne({"key1": "value1", "key2": "value2"})
    
  • 插入多条文档

    JavaScript

    复制

    db.collection_name.insertMany([    {"key1": "value1", "key2": "value2"},    {"key1": "value3", "key2": "value4"}])
    

4.2 查询数据

  • 查询所有文档

    JavaScript

    复制

    db.collection_name.find()
    
  • 查询符合条件的所有文档

    JavaScript

    复制

    db.collection_name.find({"key": "value"})
    
  • 查询符合条件的第一个文档

    JavaScript

    复制

    db.collection_name.findOne({"key": "value"})
    
  • 查询前 N 条文档

    JavaScript

    复制

    db.collection_name.find().limit(N)
    

    例如,查询前 5 条文档:

    JavaScript

    复制

    db.collection_name.find().limit(5)
    
  • 按字段升序/降序排序查询结果

    JavaScript

    复制

    db.collection_name.find().sort({"key": 1})  // 升序
    db.collection_name.find().sort({"key": -1}) // 降序
    
  • 分页查询

    JavaScript

    复制

    db.collection_name.find().skip(N).limit(M)
    

    例如,查询第 6-10 条文档:

    JavaScript

    复制

    db.collection_name.find().skip(5).limit(5)
    

4.3 更新数据

  • 更新符合条件的第一个文档

    JavaScript

    复制

    db.collection_name.updateOne({"key": "value"}, {"$set": {"key2": "new_value"}})
    
  • 更新符合条件的所有文档

    JavaScript

    复制

    db.collection_name.updateMany({"key": "value"}, {"$set": {"key2": "new_value"}})
    

4.4 删除数据

  • 删除符合条件的第一个文档

    JavaScript

    复制

    db.collection_name.deleteOne({"key": "value"})
    
  • 删除符合条件的所有文档

    JavaScript

    复制

    db.collection_name.deleteMany({"key": "value"})
    

4.5 其他常用查询操作符

  • 范围查询

    • $gt:大于

      JavaScript

      复制

      db.collection.find({"field":{$gt:value}})
      
    • $lt:小于

      JavaScript

      复制

      db.collection.find({"field":{$lt:value}})
      
    • $gte:大于或等于

      JavaScript

      复制

      db.collection.find({"field":{$gte:value}})
      
    • $lte:小于或等于

      JavaScript

      复制

      db.collection.find({"field":{$lte:value}})
      
  • 不等于

    JavaScript

    复制

    db.collection.find({"field":{$ne:value}})
    
  • $in$nin

    • $in:匹配字段值在给定数组中的文档

      JavaScript

      复制

      db.collection.find({"field":{$in:[value1, value2]}})
      
    • $nin:匹配字段值不在给定数组中的文档

      JavaScript

      复制

      db.collection.find({"field":{$nin:[value1, value2]}})
      
  • 取模运算

    JavaScript

    复制

    db.collection.find({"field":{$mod:[divisor, remainder]}})
    

    例如,查找字段 field 的值除以 10 后余数为 1 的文档:

    JavaScript

    复制

    db.collection.find({"field":{$mod:[10, 1]}})
    
  • $all:要求字段值必须匹配数组中的所有元素

    JavaScript

    复制

    db.collection.find({"field":{$all:[value1, value2]}})
    
  • $size:匹配数组字段中元素的数量

    JavaScript

    复制

    db.collection.find({"field":{$size:N}})