MongoDB基础

1
2
3
brew services start mongodb-community@4.2

brew services stop mongodb-community@4.2

1. 基本概念

集合

集合类似于数组,在集合中可以存放文档

文档

文档是文档数据库的最小单元,我们操作和存储的内容都是文档

在MongoDB中数据库和集合都不需要手动创建

当创建文档时,如果文档所在的集合或数据库不存在,会自动创建集合和数据库

2. 基本指令

  • show dbs

    显示当前所有数据库

  • use [db names]

    进入到指定的数据库中

  • db

    表示当前所处的数据库

  • show collections

    查看数据库中所存在的集合

3. CRUD

(1) 插入文档

  • db.<collection>.insert()

    • 向集合中插入1个或多个文档

    • 向test数据库中的 stus 集合中插入一个新的学生对象

      {name: "孙悟空", age: 18, gender: "male"}

      1
      2
      3
      4
      5
      
      db.stus.insert({
      	name: "孙悟空",
          age: 18,
          gender: "male"
      })
      
  • 向集合中插入文档时,如果没有指定_id属性,则数据库会用ObjectID()自动为文档添加_id,改属性作为文档的唯一标识。

  • 可以自己属性_id,数据库就不会再添加;如果自己指定,也必须确保唯一性

  • db.<collection>.insertOne()

  • db.<collection>.insertMany()

(2) 查询文档

  • db.<collection>.find()

    • 查询集合中所有符合条件的文档

    • find()可以接受一个对象作为条件

      find({})也表示查询所有文档

      {字段名: 值}: 查询字段是指定值的文档

    • find()返回是一个数组,可以用[]索引

  • db.<collection>.findOne()

    • 查询集合中符合条件的第一个文档
    • findOne()返回的是一个文档
  • db.<collection>.find().count() / db.<collection>.find().length

  • MongoDB支持通过内嵌文档的属性查询,如果要查询内嵌文档,通过.来匹配;如果要通过内嵌文档进行查询,此时属性名必须使用引号

    1
    2
    3
    
    db.users.find({
        "hobby.movies": "hero"
    });
    
  • .limit()可以设置显示数据的上限

  • 分页数据显示

    • .skip((页码-1) * 每页显示的条数).limit(每页显示的条数)

    • .skip()用于跳过指定数量的数据

    • MongoDB会自动调整skip()limit()的位置

(3) 修改文档

  • db.<collection>.update(查询条件,新对象)

    • 默认情况下用新对象替换旧对象

      1
      2
      
      //替换
      db.stus.update({name: "haven"}, {age: 28})
      
    • 如果需要修改指定属性,而不是替换,需要使用修改操作符

    • $set

      可以用来修改文档中的指定属性

      1
      2
      3
      4
      5
      6
      7
      8
      
      db.stus.update(
          {"_id" : ObjectId("5da96ae4298c2eb5254c4588")},
          {$set:{
             gender: "male",
             address: "liu sha he" 
           } 
          }
      )
      
    • $unset

      可以用来删除文档的指定属性

    • update()默认情况只改一个

  • db.<collection>.updateMany()

    • 同时修改多个符合条件的文档
  • db.<collection>.updateOne()

    • 更新第一个符合条件的文档
  • db.<collection>.replaceOne()

    • 替换一个文档
  • $push: 向数组中添加一个元素

    $addToSet: 向数组中添加一个元素,且没有重复

(4) 删除文档

  • db.<collection>.remove()

    • 可以根据条件来删除文档,传递的条件的方式和find()一样
    • 默认情况下,删除符合条件的所有文档
    • 如果remove()第二个参数为true,则只会删除一个
    • 如果只传递一个空对象作为参数,则删除全部文档
  • db.<collection>.deleteOne()

  • db.<collection>.deleteMany()

  • db.<collection>.drop()

    删除整个集合

  • db.dropDatabase()